部品の配置
まずは、部品を配置しているだけのプログラム Simple0 をみてみましょう。
このプログラムは、以下のような画面を表示するだけのプログラムです。
プログラムでやることは、
- ウィンドウを作成し、
- ウィンドウのタイトルやサイズを設定し、“x"印が押されたときの挙動を指定し、
- ボタンやテキスト領域を、ウィンドウの画面領域に生成・配置する
だけです。とはいえ、プログラムとしてみると結構長いです。GUIツールとかあるので、まじめに見なくても大丈夫ですよ。
public class Simple0 extends JFrame {
private static final long serialVersionUID = 1L;
JPanel pane; // ウィンドウの(メニューバーなどでない)本体部分。
JButton button; // ボタン一つ
JTextField text0, text1; // テキストフィールド2つ
public Simple0() {
super();
initialize(); // なんとなく、別メソッドに分けてみただけ
}
void initialize() {
setTitle("Simple0"); // ウィンドウタイトルをつけて
setSize(300, 200); // サイズをつけて
// "x"印をおされたら、Frameを終了して
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
button=new JButton(); // ボタン生成と、テキスト・サイズ設定
button.setText("Push Here!");
button.setPreferredSize(new Dimension(100, 50));
text0=new JTextField(); // テキストフィールドを作成
text0.setPreferredSize(new Dimension(300, 50));
text1=new JTextField(); // テキストフィールドをもう一つ。
text1.setPreferredSize(new Dimension(300,50));
pane = new JPanel(); // ウィンドウ本体部分を作成
// レイアウト設定(上から順に並べるレイアウト)
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
pane.add(button); // ボタンを一番上に
pane.add(text0); // 次にtext0を
pane.add(text1); // 最後に text1を
this.setContentPane(pane); // pane を JFrameに登録
}
public static void main(String[] args) {
// 詳しくは、次回以降解説するが、
// main から GUI に仕事を依頼するときは、invokeLater
// (後でやっといてね指示)を使うのが流儀。
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Simple0 frame = new Simple0(); // 生成して
frame.setVisible(true); // 表示する
}
});
}
}
ポイント
- javax.swing.JFrame の
ContentPane
として Panel を作成 - javax.swing.JButton, javax.swing.JTextField を作成し、そのサイズを指定してから、ContentPane の内部要素に登録。
ContentPane
には、layot manager を設定しておく- javax.swing.BoxLayout なら、X 軸もしくはY軸の順に、部品を配置
- main から Frame を作成する際は、
SwingUtilities.invokeLater()
を実行interface Runnable
中に、実行して欲しい内容を記述
というあたりです。
階層構造的には、こんな感じ。