Swing の JFrame による単純なウィンドウ表示
ここでは Swing を利用して、最も単純なフレーム (Frame) を表示します。
フレームというのは、Java ではトップレベルウィンドウ (top-level window) のことを指します。 AWT ではフレームは Frame というクラスであり、Swing では JFrame といいます。そして、これは Frame の派生クラスです。
package com.keicode.java.test;
import javax.swing.*;
import java.awt.*;
public class SwingTestApp1 {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
コードをみてみましょう。
まず Swing のクラス群は javax.swing.* に含まれています。javax というのは、 Swing が AWT の拡張 (eXtension) という位置付けだからです。
JFrame のインスタンスを作成した後は、サイズを指定し (setSize メソッド)、 フレームを閉じた時の動作を指定し (setDefaultCloseOperation メソッド)、 そして最後にフレームを表示しています (setVisible メソッド)。
最低でもこれだけはやらないと、ウィンドウが見えてきません。
イベント・ディスパッチ・スレッドで処理を行う
注意する点としては、Swing の UI コンポーネントは全てイベント・ディスパッチ・スレッド (event dispatch thread) で行うということです。
これを実現するために、上記のように EventQueue の invokeLater メソッドを利用しています。 invokeLater() メソッドに実行するタスクを渡します。
EventQueue.invokeLater(new Runnable() {
public void run() {
// ...
}
});
また Runnable インターフェイスは run() メソッドをひとつ持つだけのインターフェイスなので、次のようにラムダ式で書き換えることもできます。
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
// ...
});
}