如何从类外部更改方法的功能?

时间:2012-05-13 01:02:15

标签: java

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

a)有一百万个子类,这是不好的

b)有一百万个if语句,这也是不好的

理想情况下,我希望能够声明类的新实例,然后同时添加方法,就像keyAdaptor的工作方式一样。

提前致谢!

〜树

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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的答案所示。

答案 2 :(得分: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()或任何你想要的东西