サーチ…


前書き

アプレットは公式リリース以来Javaの一部であり、何年もJavaとプログラミングを教えるために使用されてきました。

近年、アプレットや他のブラウザプラグインから、ブラウザをブロックしたり積極的にサポートしていないブラウザプラグインからの移行が積極的に進んでいます。

2016年に、オラクルは、プラグインを廃止する計画を発表しました。プラグインフリーWebへの移行

より新しい、より良いAPIが利用可能になりました

備考

アプレットは、通常はWebブラウザ内で実行されるJavaアプリケーションです。基本的な考え方は、サーバーと対話して情報を転送する必要なく、ユーザーと対話することです。このコンセプトは、インターネット通信が遅くて高価だった2000年頃に非常に成功しました。

アプレットはライフサイクルを制御する5つのメソッドを提供します。

メソッド名説明
init() アプレットが読み込まれると一度呼び出されます
destroy() アプレットがメモリから削除されると一度呼び出されます
start() アプレットが可視になるたびに呼び出されます
stop() アプレットが他のウィンドウによってオーバーラップするたびに呼び出されます
paint() 必要に応じて呼び出されるか、またはrepaint()呼び出すことによって手動でトリガされます。

最小アプレット

非常にシンプルなアプレットは長方形を描き、文字列をスクリーン上に印刷します。

public class MyApplet extends JApplet{ 

    private String str = "StackOverflow";

    @Override
    public void init() {
        setBackground(Color.gray);
    }
    @Override
    public void destroy() {}
    @Override
    public void start() {}
    @Override
    public void stop() {}
    @Override
    public void paint(Graphics g) {
        g.setColor(Color.yellow);
        g.fillRect(1,1,300,150);
        g.setColor(Color.red);
        g.setFont(new Font("TimesRoman", Font.PLAIN, 48));
        g.drawString(str, 10, 80);
    }
}

アプレットのメインクラスはjavax.swing.JAppletからjavax.swing.JAppletます。

Java SE 1.2

Java 1.2以前では、Swapp APIアプレットの導入はjava.applet.Appletから拡張されました。

アプレットはmainメソッドを必要としません。エントリポイントは、ライフサイクルによって制御されます。それらを使用するには、HTML文書に埋め込む必要があります。これは、そのサイズが定義されているポイントでもあります。

<html>
  <head></head>
  <body>
     <applet code="MyApplet.class" width="400" height="200"></applet>
  </body>
</html>

GUIの作成

アプレットを使用してGUIを簡単に作成できます。彼らはContainerように動作し、 awtまたはswingコンポーネントをとるadd()メソッドを持っています。

public class MyGUIApplet extends JApplet{

    private JPanel panel;
    private JButton button;
    private JComboBox<String> cmbBox;
    private JTextField textField;

    @Override
    public void init(){
        panel = new JPanel();        
        button = new JButton("ClickMe!");
        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent ae) {
                if(((String)cmbBox.getSelectedItem()).equals("greet")) {
                    JOptionPane.showMessageDialog(null,"Hello " + textField.getText());
                } else {
                    JOptionPane.showMessageDialog(null,textField.getText() + " stinks!");
                }
            }
        });
        cmbBox = new JComboBox<>(new String[]{"greet", "offend"});
        textField = new JTextField("John Doe");
        panel.add(cmbBox);
        panel.add(textField);
        panel.add(button);
        add(panel);
    }
}

アプレット内からのリンクを開く

メソッドgetAppletContext()を使用してAppletContextオブジェクトを取得し、ブラウザーにリンクを開くように要求することができます。このためには、 showDocument()メソッドを使用します。 2番目のパラメータは、ブラウザに新しいウィンドウ_blankを使用するように、またはアプレット_selfを表示するようにブラウザに指示し_self

public class MyLinkApplet extends JApplet{
    @Override
    public void init(){
        JButton button = new JButton("ClickMe!");
        button.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent ae) {
                AppletContext a = getAppletContext();                 
                try {
                    URL url = new URL("http://stackoverflow.com/");
                    a.showDocument(url,"_blank");
                } catch (Exception e) { /* omitted for brevity */ }   
            }
        });
        add(button);
    }
}

画像、オーディオ、その他のリソースの読み込み

Javaアプレットは異なるリソースを読み込むことができます。しかし、彼らはクライアントのWebブラウザで実行されているので、これらのリソースにアクセス可能であることを確認する必要があります。アプレットはローカルファイルシステムとしてクライアントリソースにアクセスできません。

アプレットが格納されている同じURLからリソースをロードする場合は、メソッドgetCodeBase()を使用してベースURLを取得できます。リソースをロードするために、アプレットはgetImage()メソッドとgetAudioClip()メソッドを提供して画像やオーディオファイルをロードします。

画像を読み込んで表示する

public class MyImgApplet extends JApplet{

    private Image img;

    @Override
    public void init(){
        try {
            img = getImage(new URL("http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"));
        } catch (MalformedURLException e) { /* omitted for brevity */ }
    }
    @Override
        public void paint(Graphics g) {
            g.drawImage(img, 0, 0, this);
        } 
}

オーディオファイルを読み込んで再生する

public class MyAudioApplet extends JApplet{

    private AudioClip audioClip;

    @Override
    public void init(){
        try {
            audioClip = getAudioClip(new URL("URL/TO/AN/AUDIO/FILE.WAV"));
        } catch (MalformedURLException e) { /* omitted for brevity */ }
    }
    @Override
    public void start() {
        audioClip.play();
    } 
    @Override
    public void stop(){
        audioClip.stop();
    }
}

テキストファイルを読み込んで表示する

public class MyTextApplet extends JApplet{
    @Override
    public void init(){
        JTextArea textArea = new JTextArea();
        JScrollPane sp = new JScrollPane(textArea);
        add(sp);
        // load text
        try {
            URL url = new URL("http://www.textfiles.com/fun/quotes.txt");
            InputStream in = url.openStream();
            BufferedReader bf = new BufferedReader(new InputStreamReader(in));
            String line = "";
            while((line = bf.readLine()) != null) {
                textArea.append(line + "\n");
            }
        } catch(Exception e) { /* omitted for brevity */ }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow