gpt4 book ai didi

java - ActionListener - 向 JButtons 的 ArrayList 添加 Action

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:14 25 4
gpt4 key购买 nike

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

}

}

它工作得很好,但是我想知道是否有比使用 if 更好的方法来处理每个按钮事件。我试过使用 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;

}

}

关于java - ActionListener - 向 JButtons 的 ArrayList 添加 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com