自動生成されたソースコード
では、先ほど作成したGUIの画面がどのようなソースコードになっているか、調べてみることにしましょう。VEFrame.javaのソースコードを以下にあげておきます。(一部、コメント類は省略してあります)
package jp.tuyano.vetest;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
public class VEFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JLabel jLabel = null;
private JButton jButton = null;
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("Click");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO
}
});
}
return jButton;
}
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
SwingUtilities.invokeLater(new Runnable() {
public void run() {
VEFrame thisClass = new VEFrame();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
public VEFrame() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel = new JLabel();
jLabel.setText("This is Visual Class.");
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(jLabel, BorderLayout.NORTH);
jContentPane.add(getJButton(), BorderLayout.SOUTH);
}
return jContentPane;
}
}
見ればわかるように、かなりクセのあるソースコードであることがわかります。コンストラクタでは、initializeメソッドを呼び出して初期化の処理を行っています。このinitializeでは、getJContentPaneメソッドでコンテントペイントなるJPanelを取得し、これをコンテントペインに設定しています。
このgetJContentPaneの中で、実際のGUIの構築が行われています。JLabelを作成しする処理などはここでおこなっていますね。が、JButtonの作成処理は、ここから更にgetJButtonメソッドを呼び出して行っています。
このgetJButtonでは、JButtonを作成した後、無名クラスでActionListenerを組み込んでいます。その中にある// TODOのコメント部分に必要な処理を追加すれば、イベント処理が完成するようになっているのですね。
まぁ、JPanelやJButtonの作成がメソッドとして切り分けられているのは、そうすることで各コンポーネントごとに作成処理が整理され、自動生成する上で都合がよいのだろうという想像はつきます。が、JButtonはそうするがJLabelはそうしない、となっていたり、肝心のイベント組み込み部分は独立した形で切り分けずに無名クラスで組み込んで合ったりと、個人的に「???」と?マークが頭の周りをぐるぐる回ってしまうソースコードではありますね。
VEの最大の欠点は、ここにあるような気がします。せっかく生成されたソースコードが、どうも正直いって「使いにくい」のです。といって、あまりにGUIの生成部分のコードを変えてしまうと、VEが解読できなくなってしまうのでは?という不安があるため、手直しするのも躊躇してしまいます。結局、なんとも居心地の悪いソースコードをベースにプログラミングを行うことになってしまうわけです。
GUIデザイナーは、実にこの部分に最大のチェックポイントがあるように思えます。すなわち、「生成されたソースコードが、自分にとって使いやすいものになっているか」という点です。例えば、ガイドにとっては、VEのソースコードよりNetBeansの生成するソースコードのほうがしっくりくるのです。
これは、どちらがよいというより、個人の「相性」の問題といってよいでしょう。VEの生成するソースコードにすぐ慣れた人、違和感を感じない人にとっては、VEはまさにベストツールとなってくれるはずです。