torutkのブログ

ソフトウェア・エンジニアのブログ

IDEによるGUIイベント処理コード生成の違い

Eclipse 3.1 + VisualEditor 1.1

JButtonを貼ってActionListenerを生成した場合、無名クラスを生成し、その中にイベント処理コードを書かせるような形式となっていました。

class MyFrame extends JFrame {
    private JButton okButton = null;
    ...
    private JButton getOkButton() {
        if (okButton == null) {
            okButton = new JButton();
            okButton.setText("OK");
            okButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.out.println("actionPerformed()"); // TODO ...
                }
            });
        }
        return okButton;
    }
}

NetBeans 5.0

リスナー生成スタイルとして3パターン選択できるようになっていますが、僕のマシン環境ではどれを選択しても同じコード(匿名内部クラス)しか生成されませんでした。ちなみに設定した場所は[ツール]メニュー→[オプション]メニュー→[その他]→GUIビルダーのコード生成

  1. 匿名内部クラス
  2. 1つの内部クラス
  3. 主クラス

匿名内部クラスの生成スタイル

JButtonを貼ってActionListenerを生成した場合、無名クラスを生成しますが、その中ではボタンの変数名にちなんだprivateメソッドを呼ぶだけにして、イベント処理のロジックはそのprivateメソッドに書かせるようになっています。

class MyFrame extends javax.swing.JFrame {
    public MyFrame() {
        initComponents();
    }
    private void initComponents() {
        okButton = new javax.swing.JButton();
        ...
        okButton.setText("OK");
        okButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                okButtonActionPerformed(evt);
            }
        });
        ...
    }
    private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {
        System.out.println("OK button pressed.");
    }
    private javax.swing.JButton okButton;
}