ActionListener - 将动作添加到 JButtons 的 ArrayList
Posted
技术标签:
【中文标题】ActionListener - 将动作添加到 JButtons 的 ArrayList【英文标题】:ActionListener - adding action to a ArrayList of JButtons 【发布时间】: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!");
它工作得很好,但是我想知道是否有更好的方法来处理每个按钮事件而不是使用if
s。
我尝试过使用switch
语句,但它不适用于对象,并且这些按钮中的.getText()
似乎不是这样。
感谢您的回答!
【问题讨论】:
在类似的问题中有一个不错的 community-wiki-answer:***.com/a/31329139/476791 它展示了如何以通用方式创建按钮。 【参考方案1】:您可以使用 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;
【讨论】:
感谢您的回复。起初,我阅读了您的帖子并开始在网上搜索getActionCommand()
,但它有点太复杂了(正在阅读中)。但是,一旦我回到家,我就运行了您的代码并理解了它 - 使用 if
s 或 switch
获取对象字符串比使用 indexOf
获取对象字符串更好。非常感谢!【参考方案2】:
另一种可能性:
public void actionPerformed(ActionEvent event)
int indx = numberButtons.indexOf( event.getSource() );
if ( indx >= 0 )
// indx is the index of the button that was pushed
【讨论】:
谢谢,不过@Ninth-tail 发布了一个更合适的解决方案。但是谢谢 - 我学到了新东西!以上是关于ActionListener - 将动作添加到 JButtons 的 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中将 actionlistener 添加到文本字段
如何在 Java 中将 ActionListener 添加到 JButton 上