4

紛らわしいタイトルで申し訳ありませんが、文の下でこれを表現する方法がわかりません. 私がやりたいのは、クリックするとさまざまなことを行う「ボタン」のメニューシステム(一時停止、終了、別のメニューへの移動など)です。私がこれを行うことを考えることができる唯一の方法は

a) 100 万個のサブクラスがあり、これは悪いことです

b) 100 万回の if ステートメントがあり、これも悪いことです

理想的には、クラスの新しいインスタンスを宣言するだけで、同時にメソッドを追加できるようなものが欲しいです。

前もって感謝します!

~ツリー

4

3 に答える 3

3

ボタン クラスを使用して、ボタンごとに異なるハンドラーを使用できる必要があります。ボタンに実行させたいことごとに異なる機能がありますが、ボタン自体はすべて同じクラスにすることができます。

于 2012-05-13T01:07:49.453 に答える
1

優れた解決策は、関数型プログラミング言語で可能なように、単一のクラスを持ち、メソッドをパラメーターとして渡すことです。今のところこれは不可能ですが、Java 8 のラムダ式に期待してください。たとえば、次のようなことが可能になります。

public class MyButton implements ActionListener {

    private ActionListener handler;

    public MyButton(ActionListener lambda) {
        handler = lambda;
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        handler(event);
    }

}

そして、次のような新しいボタンを作成できます。

MyButton but1 = new MyButton(e -> /* do something */);
MyButton but2 = new MyButton(e -> /* do something else */);

同様に、アクション リスナーを既存の に直接追加することも可能JButtonです。

button.addActionListener(e -> /* do something */);

@Basilio German の回答に示されているように、より詳細ですが、現在利用可能なオプションは、アクションリスナーを匿名クラスパラメーターとして渡し、関連するメソッドをオーバーライドすることです。

于 2012-05-13T01:11:55.280 に答える
1

多数の異なるボタンを持つ 1 つのクラスを作成し、各ボタンに異なる機能を持たせることができます。以下は、JButton が特定の処理を行うためのコードです。

    JButton exampleButton= new JButton("Click me!");
    exampleButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //Do something when the button is clicked
        }
    });

もちろん、play()、stop()、またはその中から必要なものを呼び出します

于 2012-05-13T01:12:26.850 に答える