GUIを操作してみる!
では、どんどん試していきましょう。今度は、GUIをインタラクティブに操作してみましょう。SwingのJFrameを作り、表示させてみることにしましょう。
bsh % f1 = new JFrame("This is Frame 1");
bsh % f1.setSize(300,300);
bsh % f1.setVisible(true);
<New Bsh Workspace>JFrameインスタンスを作成して表示してみる。ちゃんとSwingも動く。 |
順番に3つのコードを実行するわけです。これで、画面にポンッ!とウインドウが現れます。なんだか冗談のように簡単ですね。これで、f1という名前のJFrameインスタンスができました。もちろん、f1をそのまま操作することもできますし、更にオブジェクトを作ってf1に組み込んだりすることもできます。
コードを見て気がつくのは、「import文がない」ということでしょう。本来なら、import文がなければJFrameは「javax.swing.JFrame」と記述しないといけないはずですが、そこはスクリプト言語。ただ「JFrame」だけでちゃんと理解してしまいます。ある意味、Javaよりもはるかに簡単ですね。
こうして作成したf1インスタンスは、もちろんシェルのウインドウを閉じるまでずっと保持され続けます。ですから、これに更にコンポーネント類を追加していくことだって可能です。
bsh % f1.setLayout(null);
bsh % l1 = new JLabel("Hello");
bsh % l1.setFont(new Font("Serif",Font.BOLD,24));
bsh % l1.setBounds(25,25,200,25);
bsh % f1.add(l1);
bsh % f1.repaint();
<New Bsh Workspace>JLabelを組み込んでみた。repaintしないとうまく表示されないことがあるので注意。 |
今度は、JLabelを作ってJFrameに組み込んでみましょう。これもnew JLabelでインスタンスを作成し、それを設定してaddすればおしまいです。最後にrepaintをしていますが、これをしないとaddしたコンポーネントがすぐに表示されない場合があるようです(もっとも、環境やバージョンによるかも知れませんが)。もちろん、repaintしなくとも、一度ウインドウをリサイズするなどして表示が更新されれば正常に表示されるようになります。
コンポーネントに限らず、Fontインスタンスなどもそのまま作成でき、きちんと表示に反映されていますね。Colorなどももちろんちゃんと動きます。――また、コードを見て気づいた人もいるでしょうが、ここではJFrameのgetContentPane().addしているわけではなく、そのままf1.addしていますね。Swingなのに、ContentPaneでなくJFrameに直接addして表示されるというのは? そう、Java 5に対応しているということですね(Java 5からは、SwingでもそのままJFrameにaddするだけで自動的にContentPaneにaddされるようになっています)。現在、もっとも広く使われているJava 5に既に対応しているというのは非常に強力です。