生成されるソースコードを見る


では、デザイナーを使ってマウスでデザインした画面表示は、どのような形で実装されているのでしょうか。生成されるソースコードを見てみることにしましょう。ここでは、LabelとButtonを1つずつ

package jp.allabout;

import java.awt.Frame;
import java.awt.Button;
import java.awt.BorderLayout;
import java.awt.Label;

public class SampleApp extends Frame {

  private static final long serialVersionUID = 1L;
  private Button button1 = null;
  private Label label1 = null;

  public SampleApp() {
    super();
    initialize();
  }

  private void initialize() {
    label1 = new Label();
    label1.setText("ラベル");
    this.setSize(300, 200);
    this.setTitle("Frame");

    this.add(getButton1(), BorderLayout.SOUTH);
    this.add(label1, BorderLayout.NORTH);
  }

  private Button getButton1() {
    if (button1 == null) {
      button1 = new Button();
      button1.setLabel("Click");
      button1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
          System.out.println("actionPerformed()"); // TODO
        }
      });
    }
    return button1;
  }

}

見ればわかるように、コンポーネントの組み込み処理は、initializeというメソッドにまとめられています。Labelなどは、インスタンス作成と設定、組み込み処理がそのままinitializeに追加されていますね。

が、Buttonは、「getButton」という専用メソッドが用意され、ここでインスタンスの準備をしています。Buttonなどはイベント処理も含めた複雑な処理をすることが多いので、インスタンス生成の専用メソッドを使う形になっているのでしょう。またイベントの組み込みも、無名クラスを使った形で組み込まれています。このあたりは、人によって好みの分かれるコーディングといってよいでしょう。

デザイナーを使ったコーディングの最大の問題点は、「自分流のコードが書けない」という点にあるように思えます。とにかくデザイナーが自動生成したソースコードを黙って使うしかない。あれこれ修正するとデザイナーが動かなくなってしまう。人によっては、これを嫌い、「だったら全部自分で手書きしたほうがいい」となってしまうかも知れません。そのあたりを見極めた上で、ある程度割り切って使うのであれば、Visual EditorはGUI作成の便利ツールとして役立つはずですよ。