Java ActionListener-向JButtons的ArrayList添加操作
我正在制作一个简单的计算器。为了生成所有这些按钮,我制作了一个ArrayList,在数字循环中对它们进行初始化,其余的则手动进行初始化:Java ActionListener-向JButtons的ArrayList添加操作,java,swing,arraylist,actionlistener,Java,Swing,Arraylist,Actionlistener,我正在制作一个简单的计算器。为了生成所有这些按钮,我制作了一个ArrayList,在数字循环中对它们进行初始化,其余的则手动进行初始化: //Button Initialization for(int i=0; i<10; i++) { numberButtons.add(new JButton(""+i)); //indexes 0-9 of the ArrayList } numberButt
//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("="));
在另一个名为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!");
}
}
}
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入javax.swing.JButton;
公共类EventHandling实现ActionListener{
私有数组列表按钮;
公共事件处理(ArrayList numberButtons){
this.numberButtons=numberButtons;
}
已执行的公共无效操作(操作事件){
if(event.getSource()==numberButtons.get(1)){
System.out.println(“按钮1工作!”);
}
if(event.getSource()==numberButtons.get(2)){
System.out.println(“按钮2工作!”);
}
}
}
它工作得很好,但是我想知道是否有更好的方法来处理每个按钮事件,而不是使用if
s。
我试过使用switch
语句,但它不适用于对象,而且这些按钮中的.getText()
似乎不适用
谢谢你的回答 您可以使用event.getActionCommand()。这将返回分配给事件源(在本例中为JButton)的字符串
public void actionPerformed(ActionEvent event) {
switch (e.getActionCommand())
{
case "1":System.out.println("pressed button 1");
break;
case "2":System.out.println("pressed button 2");
break;
case "*":System.out.println("pressed button *");
break;
case "\u221A":System.out.println("pressed button \\u221A");
break;
}
}
另一种可能性:
public void actionPerformed(ActionEvent event) {
int indx = numberButtons.indexOf( event.getSource() );
if ( indx >= 0 ) {
// indx is the index of the button that was pushed
}
}
类似的问题有一个很好的社区维基答案:它展示了如何以一种通用的方式创建按钮。谢谢你的回答。起初,我读了你的文章,开始在网上搜索
getActionCommand()
,但不知怎么的,它太复杂了(在移动中阅读)。但是一旦我回到家,我就运行了你的代码并理解了它——用if
s或switch
获取一个对象的字符串比通过indexOf
获取其编号要好。非常感谢!谢谢,不过@Nixth tail发布了一个更合适的解决方案。但是谢谢你-我学到了一个新东西!
public void actionPerformed(ActionEvent event) {
int indx = numberButtons.indexOf( event.getSource() );
if ( indx >= 0 ) {
// indx is the index of the button that was pushed
}
}