2008/08/02

JavaFX GUI記述法

なんとなくJavaFX Scriptの言語仕様読み始め。

Javaのジョーシキも知らないのに、読み出すと面白いわぁ。まず目を引くのは、GUIの記述法ですな。

JavaなヒトがSwingがどうとか言っているのは知っているけど、非Javaな私としてはこれまで、「なにソレ?」くらいの感じだったわけです。今回はからずもSwingのサンプルソースをみていて、"JavaFX での GUI 作成は「宣言」式で行うことができる、ワー、拍手喝采!!"みたいなJavaFX界隈のノリを理解できました。下記がJava のクラスのインポートでGUIを実装した場合のソース。

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.lang.System;

var frame = new JFrame();
var button = new JButton("Press me");
frame.getContentPane().add(button);
button.addActionListener(new ActionListener() {
operation actionPerformed(event) {
    System.out.println("You pressed me");
}
    });
frame.pack();
frame.setVisible(true);

うげげ。面倒くさ…。

.Netの場合だったら、Winフォーム作るとき、普段IDE環境で済ませちゃっていているわけですが。VB.Netの吐くソースをみると、Formクラスを継承して自分自身のフォームのクラスを書いていくわけなんですよね。理屈的には、わかりやすい。Javaはなんで継承して使わないんだろ?せめて土台となるJFrameくらい継承すればいいのに(と思ってウロウロしてサンプルソースを探していたら、JFrameを継承する書き方も、やっぱり王道みたいでした。ということは、.NetもJavaもGUIの記述法は似たり寄ったりってことですね。VS環境以外で.Net開発をしようと思ったことがない私が、さほど記述の手間については気にしたことがなかっただけだってことですね)。

もっともPanelとかのコントロールの中にTextBoxをおくときには、結局

Me.Panel1 = New System.Windows.Forms.Panel
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Panel1.SuspendLayout()
Me.SuspendLayout()

Me.Panel1.Controls.Add(Me.TextBox1)

とか、書いていくわけなんですけどね。

基本的にはあくまでも土台となるFormクラスのサブクラスを書いているイメージが濃厚デス。さらに各種コントロールについては、コンストラクタでプロパティやなんやかんやの初期値がほぼ設定され済みで。ソレ故に、変えたいところのプロパティだけ設定していっているイメージが強かったんですよね。このイメージの由来は、IDEでの操作感覚からきているのかも。

で、やっと本題です。Javaや.Netでのコントロールのレイヤー感覚等の記述の面倒くささに比べて、JavaFXでの書き方はこうなるそうだ。

 Frame {
              content: Button {
                   text: "Press Me"
                   action: operation() {
                        System.out.println("You pressed me");
                   }
              }
              visible: true
         }

おおお、なんてエレガント。Swing、VB.Netでの書き方に比べて、なんてシンプル。この「うれしさ」はわかるなぁ。

この書き方だったら{}の構造で、どのコントロールがどう重なっているか、一発で見当がついちゃうし。問答無用にスッキリ、大雑把。でもこの大雑把な感じはアリだなぁ。結局初期値を設定しておいて、変えたいプロパティとかだけ呼びだした後、設定しなおしてあげればいいだけの話なんだし。

0 件のコメント: