在Java swing GUI中将ActionListener类添加到多个JButton?

时间:2012-10-29 14:31:54

标签: java swing user-interface actionlistener calculator

我用Java制作了一个计算器,但有些代码非常重复。这是我用来添加ActionListener

的内容
    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);

有没有办法缩短它?

4 个答案:

答案 0 :(得分:4)

您可以将所有组件(按钮)放在List中,通过某些代码(如

)附加侦听器
for( Component c : componentsList ) {
  c.addActionListener(yourListener);
}

答案 1 :(得分:1)

对按钮的全部或部分(仅限数字按钮)使用JButton[]。然后迭代该数组并将ActionListener添加到按钮:

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

int i = 0;

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

同样,您可以使用JButton[]作为操作员按钮。通过使用不同的数组,我认为可以避免可能的混淆。

答案 2 :(得分:0)

创建一个方法,该方法将创建按钮并为其分配侦听器。您仍然会收到大量调用,但至少所有按钮创建和初始化代码都将驻留在同一个方法中,因此您可以更轻松地为每个按钮修改它。

答案 3 :(得分:0)

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