gpt4 book ai didi

java - 如何为多个 JButton 创建单个 ActionListener

转载 作者:行者123 更新时间:2023-12-01 23:46:16 24 4
gpt4 key购买 nike

我正在使用 MVC 创建一个基本计算器。到目前为止,我正在改编一个教程,该教程仅将两个用户输入的值相加。

目前,我添加到 View 中的每个按钮都有自己的监听器,这是可以的。但是,根据教程, Controller 的每个按钮都有一个 ActionListener 内部类。这会重复大量的代码。

如何为所有按下的按钮创建一个 ActionListener 类,并在按下的按钮的 id 上使用 case 语句?

在 View 中注册 oneButton

void oneListener(ActionListener listenForOneButton){    
oneButton.addActionListener(listenForOneButton);
}

在Controller内部类中为oneButton实现ActionListener

class oneListener implements ActionListener{
public void actionPerformed(ActionEvent e){
int previousNumber, displayNumber = 0;
try{
previousNumber = theView.getPreviousDisplayNumber();
displayNumber = previousNumber+1;
theView.setDisplayNumber(displayNumber);
}
catch(NumberFormatException ex){
System.out.println(ex);
theView.displayErrorMessage("You Need to Enter Integers");
}
}
}

最佳答案

从实现 ActionListener 的类开始...

public class CalculatorHandler implements ActionListener{

public static final String ADD_ACTION_COMMAND = "Action.add";

public void actionPerformed(ActionEvent e){

if (ADD_ACTION_COMMAND.equals(e.getActionCommand()) {
// Do your addition...
} else if ...

}
}

最好将此类可以处理的操作命令定义为常量,从而消除任何歧义...

接下来,在保存按钮的类中,创建 ActionListener 的实例...

CalculatorHandler handler = new CalculatorHandler();

然后像往常一样创建按钮并注册处理程序...

JButton plus = new JButton("+");
plus.setActionCommand(CalculatorHandler.ADD_ACTION_COMMAND);
plus.addActionListener(handler);

恕我直言,这种方法的唯一问题是它会创建一个巨大的 if-else 语句,这可能会变得难以维护。

在我看来,我会创建某种模型/构建器,其中包含一系列辅助方法(例如 add(Number)subtract(Number) 等) )并使用Actions API对于每个按钮的单独操作...但这只是我...

关于java - 如何为多个 JButton 创建单个 ActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17007807/

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