2

私の質問は、EclipseとSwingWindowBuilderプラグインに固有のものです。

単純なSwingアプリを作成するために、私は通常、クラスを作成してJFrameを拡張します。Swingコンポーネントをプライベートクラス変数にします。これにより、次のようにActionListenersを追加し、actionPerformed()のswingコンポーネントにアクセスできます。

public class MyClass() extends JFrame implements ActionListener {
    private JButton btnClickMe = new JButton("Click me");

    public MyClass() {
        super("title");
        this.setLayout(null);
        btnClickMe.setBounds(1,1,100,100);
        this.add(btnClickMe);
        btnClickMe.addActionListener(this);
        this.setVisible(true);
    }

    public void actionPerformed(ActionEvent event) {
        Object source = event.getSource();
        if(source == btnClickMe) { // do something }
    }

    public static void main(String[] args) {
        new MyClass();
    }
}

デフォルトでは、WindowBuilderプラグインはSwingコンポーネント変数を作成します。プライベートクラス変数ではなく、コンストラクター(public MyClass())と見なされるものを推測します。その結果、スコープが原因で、Swing変数がactionPerformed()に表示されないため、以前のようにActionListenersを使用できません。

誰かがこれをどのように克服できるかアドバイスできますか?

4

1 に答える 1

4

これらのローカル変数をフィールドにリファクタリングすることを妨げているのは何ですか?WindowBuilderの最も優れている点の1つは、手書きのコードをある程度解析できることです。

さらに、ウィンドウビルダーには、コントロールのフィールド変数を作成するための構成オプションがあります。Eclipseを見てくださいPreferences->WindowBuilder->Swing->Code generation;)

于 2012-04-10T03:04:56.173 に答える