1

我用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

4 回答 4

4

您可以将所有组件(按钮)放在 List 中,并通过一些代码附加侦听器,例如

for( Component c : componentsList ) {
  c.addActionListener(yourListener);
}
于 2012-10-29T14:36:49.487 回答
1

将 aJButton[]用于所有或部分(可能只有数字按钮)按钮。然后遍历该数组并添加ActionListener到按钮:

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

int i = 0;

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

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

于 2012-10-29T14:37:49.843 回答
0

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

于 2012-10-29T14:35:21.860 回答
0

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

于 2012-10-29T14:41:32.767 回答