Java ActionListener-向JButtons的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

我正在制作一个简单的计算器。为了生成所有这些按钮,我制作了一个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("="));
在另一个名为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
   }
}