【发布时间】:2015-11-07 11:58:57
【问题描述】:
我正在构建一个简单的计算器。为了生成所有这些按钮,我制作了一个 ArrayList,在循环中为数字初始化它们,并为其余的手动初始化:
//Button Initialization
for(int i=0; i<10; i++) {
numberButtons.add(new JButton(""+i)); //indexes 0-9 of the ArrayList
}
numberButtons.add(new JButton(",")); //index 10 and so on
numberButtons.add(new JButton("C"));
numberButtons.add(new JButton("+"));
numberButtons.add(new JButton("-"));
numberButtons.add(new JButton("\u221A"));
numberButtons.add(new JButton("*"));
numberButtons.add(new JButton("/"));
numberButtons.add(new JButton("="));
我还为它们添加了 ActionListener:
//Adding ActionListener
EventHandling handler = new EventHandling(numberButtons);
for (JButton buttons : numberButtons) {
buttons.addActionListener(handler);
}
在另一个名为 EventHandling 的类中,我想根据按下的数字启动操作。我已经创建了这个:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
public class EventHandling implements ActionListener {
private ArrayList<JButton> numberButtons;
public EventHandling(ArrayList<JButton> numberButtons) {
this.numberButtons = numberButtons;
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == numberButtons.get(1)) {
System.out.println("Button 1 works!");
}
if (event.getSource() == numberButtons.get(2)) {
System.out.println("Button 2 works!");
}
}
}
它工作得很好,但是我想知道是否有更好的方法来处理每个按钮事件而不是使用ifs。
我尝试过使用switch 语句,但它不适用于对象,并且这些按钮中的.getText() 似乎不是这样。
感谢您的回答!
【问题讨论】:
-
在类似的问题中有一个不错的 community-wiki-answer:stackoverflow.com/a/31329139/476791 它展示了如何以通用方式创建按钮。
标签: java swing arraylist actionlistener