2012-12-09 62 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; 
} 

而這個處理動作

​​
相關問題