2012-10-29 64 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

可能有另一种选择 - 将所有按钮添加到单个容器并将侦听器添加到该容器。