2012-10-29 66 views
1

我用Java製作了一個計算器,但其中一些代碼非常重複。這是我用來添加一個ActionListener在Java Swing GUI中將ActionListener類添加到多個JButton中?

one.addActionListener(handlerOne); 
    two.addActionListener(handlerOne); 
    three.addActionListener(handlerOne); 
    four.addActionListener(handlerOne); 
    five.addActionListener(handlerOne); 
    six.addActionListener(handlerOne); 
    seven.addActionListener(handlerOne); 
    eight.addActionListener(handlerOne); 
    nine.addActionListener(handlerOne); 
    zero.addActionListener(handlerOne); 

    add.addActionListener(handlerOne); 
    subtract.addActionListener(handlerOne); 
    multiply.addActionListener(handlerOne); 
    divide.addActionListener(handlerOne); 
    sqrt.addActionListener(handlerOne); 
    exp.addActionListener(handlerOne); 
    equals.addActionListener(handlerOne); 
    cls.addActionListener(handlerOne); 
    modulus.addActionListener(handlerOne); 

有什麼辦法可以縮短這個嗎?

+1

我會用'Action'替換'ActionListener'。另請參閱[這個答案](http://stackoverflow.com/a/12463553/1076463)。 – Robin

回答

1

你的按鈕使用全部或部分(僅適用於數字按鈕也許)一JButton[]。然後遍歷數組,並添加ActionListener到按鈕:

JButton[] buttons = new JButton[10]; // For digit buttons. 

int i = 0; 

for(JButton button: buttons) 
    buttons[i++].addActionListener(handlerOne); 

同樣可以使用操作按鈕的JButton[]。通過使用不同的陣列,我想可以避免可能的混淆。

0

創建一個方法,該方法將創建按鈕併爲其指派一個偵聽器。您仍然會收到一堆調用,但至少所有的按鈕創建和初始化代碼都將駐留在同一個方法中,因此您可以更輕鬆地爲每個按鈕進行修改。

4

你可以把你所有的組件(按鈕)在列表中的一些代碼附加聽衆喜歡

for(Component c : componentsList) { 
    c.addActionListener(yourListener); 
} 
0

可能有另一種選擇 - 將所有按鈕添加到單個容器並將偵聽器添加到該容器。