4

抱歉标题令人困惑,但我不知道如何用一句话来表达这个。我想要做的是有一个“按钮”菜单系统,当点击时会做不同的事情(暂停、结束、转到不同的菜单等)。我能想到的唯一方法是

a)有一百万个子类,这很糟糕

b) 有一百万个 if 语句,这也很糟糕

理想情况下,我希望我可以声明类的新实例,然后同时添加方法,有点像 keyAdaptor 的工作方式。

提前致谢!

〜树

4

3 回答 3

3

您应该能够使用按钮类并为每个按钮设置不同的处理程序。对于您希望按钮执行的每件不同的事情,都会有不同的功能,但是按钮本身可以都是同一个类。

于 2012-05-13T01:07:49.453 回答
1

一个不错的解决方案是拥有一个类并将方法作为参数传递,这在函数式编程语言中是可能的。目前这是不可能的,但期待 Java 8 的Lambda 表达式。例如,这样的事情是可能的:

public class MyButton implements ActionListener {

    private ActionListener handler;

    public MyButton(ActionListener lambda) {
        handler = lambda;
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        handler(event);
    }

}

您将能够像这样创建新按钮:

MyButton but1 = new MyButton(e -> /* do something */);
MyButton but2 = new MyButton(e -> /* do something else */);

同样,可以直接将动作侦听器添加到现有的JButton

button.addActionListener(e -> /* do something */);

另一个更详细但当前可用的选项是将动作侦听器作为匿名类参数传递,并覆盖相关方法,如@Basilio German 的回答所示。

于 2012-05-13T01:11:55.280 回答
1

您可以拥有一个包含许多不同按钮的类,并让每个按钮执行不同的操作。这是 JButton 执行特定操作的代码:

    JButton exampleButton= new JButton("Click me!");
    exampleButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //Do something when the button is clicked
        }
    });

当然,你可以从里面调用 play()、stop() 或者你想要的任何东西

于 2012-05-13T01:12:26.850 回答