这很难用,但我需要能够将特定方法链接到对象。更具体地说,我正在制作面向图形的GUI,我希望能够将任意方法指定为元素的默认“动作”功能,例如按钮。
也就是说,我创建了这些基本上具有绘制自己能力的界面“图形”对象。我希望他们能够处理自己的行为,所以我可以做一些这样的事情:
GraphicObject b1 = new Button();
GraphicObject b2 = new Button();
b1.assignDefaultAction(---some method reference here--);
b2.assignDefaultAction(---a different method reference here--);
然后,如果我做了类似的事情:
b1.action();
b2.action();
每个元素将独立调用自己的引用方法。我相信这可以在C ++中实现,但我还没有在Java中看到它。它甚至可能,还是有某种解决方法?我试图避免的事情是必须为我需要做的每一件小事创建特定的抽象,或者将我的包含JPanel的一百个规格看起来很乱。
感谢您的帮助。
答案 0 :(得分:6)
按钮应该使用ActionListener
实现。在这种特殊情况下坚持使用Swing。
您自己的类可以效仿并从命令模式界面开始:
public interface Command {
public void execute(Map<String, Object> parameters);
}
或许更好的想法是坚持使用JDK提供的API并尝试Callable。
答案 1 :(得分:1)
Java中没有方法引用。相反,您可以使用伪闭包(也称为匿名内部类)。唯一的问题当然是,如果需要,你不能重复使用这些功能。
答案 2 :(得分:0)
通常,您只需使用ActionListener匿名内部类来执行此操作,并在actionPerformed方法中添加所需的任何方法调用。
类似的东西:
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
b.someMethod();
}
});
答案 3 :(得分:0)
从 Java 8 开始,将会有易于使用的方法引用和lambda表达式。
将操作分配给按钮实际上就是一个很好的例子。
bttnExit.setOnAction((actionEvent) -> { Platform.exit(); });
或使用方法参考:
bttnExit.setOnAction(MyClass::handleExitButton);