2012-12-09 8 views
5

ボタンのグループにActionListenerを追加したいと思います。 ボタンをラップするクラスはありますか? GroupJButtonsのようなものか、より一般的なオブジェクトのグループですか?だから私はすべてActionListenerに設定することができます。 どのボタンが押されているかは本当に気にしていませんが、私はテキストを変更したいので、それをJButtonにキャストしてテキストを変更するだけです。多くのJButtonのための1つのActionListener

プロセス全体では、コードラインが1または2(ループを使用する場合)に削減されますが、論理的に優れているので、コードラインを減らしたいと思います。

+2

それは多くのボタンが*正確に*同じことをしている非常に珍しいGUIです。ユースケースとは何ですか? –

答えて

7

を作成するためにこれを使用することができます。

class MyAction extends AbstractAction { 
     public MyAction(String text, ImageIcon icon, 
        String desc, Integer mnemonic) { 
     super(text, icon); 
     putValue(SHORT_DESCRIPTION, desc); 
     putValue(MNEMONIC_KEY, mnemonic); 
    } 
    public void actionPerformed(ActionEvent e) { 
     //do the action of the button here 
    } 
    } 

は、その後、あなたが同じことをすることができます起こるしたい各ボタンのために:

Action myAction = new MyAction("button Text", anImage, "Tooltip Text", KeyEvent.VK_A); 
button = new JButton(myAction); 
+0

非常に良い解決策!しかし、それは少し過度のように見えるのではないですか?ボタンのグループのためだけに? –

+2

@Arno:それは私にとって過酷ではないようです。良い答えは1+です。すべてのボタンが同じテキストとアクションを持つ場合、1つのMyActionオブジェクトを作成して多数のボタンを作成することができます。ボタンのタイトルが異なる場合は、ActionListenerを1つ作成して複数のボタンに追加する必要があります。 –

+0

@HovercraftFullOfEels OK、それを知ってよかった! –

4

あなたはAbstractActionクラスを拡張し、単に多くのボタンに同じアクションを適用することができ、各ボタン

private JButton createButton(String title, ActionListener al) { 
    JButton button = new JButton(title); 
    button.addActionListener(al); 
    return button; 
} 

そして、この場合、このアクションを処理するため

​​
関連する問題