2012-12-09 60 views
5

我想添加一个ActionListener到一组按钮。 是否有任何包装按钮的类?像GroupJButtons或更一般的对象组?所以我可以为他们设置一个ActionListener。 毕竟我并不在乎哪个按钮被按下,我只是想改变他的文字,所以我需要做的就是将它转换为JButton并更改文字。许多JButton的一个ActionListener

整个过程会减少1或2(如果你使用循环)的代码行,但我想这样做,因为它听起来逻辑上更好。

+2

它是有许多按钮做* *确切同样的事情非常不寻常的GUI。什么是用例? –

回答

7

在这种情况下,你可以扩展AbstractAction类和简单地套用相同的动作很多按钮。

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

非常好的解决方案!但是,这似乎有点矫枉过正?只是为了一组按钮? – 2012-12-09 14:46:00

+2

@Arno:它对我来说似乎并不过分。 1+为好的答案。如果所有按钮都具有相同的文本和操作,则可以创建一个MyAction对象并使用它创建多个按钮。现在,如果按钮的标题不同,则可能需要创建一个ActionListener,然后将其添加到多个按钮。 –

+0

@HovercraftFullOfEels好吧,很高兴知道! – 2012-12-09 14:53:26

4

您可以使用它来创建每个按钮

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

而这个处理动作

​​
相关问题