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

标签 java swing jbutton actionlistener

我正在使用 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/

相关文章:

java - SAXParser:仅处理特定的父子级

java - 使用 Apache POI 在 Word 表中使用单倍行距

java - JEdi​​torPane、HTMLEditorKit - 插入自定义标签的自定义操作

java - 按钮执行绝对忽略 for 循环

python - 在 Jython 中使用 getattr 时出现 StackOverflowError

java - 如何使 String 值调用 java 中特定的现有 JButton 变量名?

java - 可变可见度

java - spring mvc 3.0之后没有改变重定向url

java - Java Swing 中 MouseMotionListener 的适当方法是什么?

Java添加ActionListener到特殊按钮