Java 将自定义方法作为键侦听器添加到组件
我尝试使用不同的方法为swing框架中的每个组件定义单独的方法作为侦听器 对于操作侦听器,使用此签名定义私有void非常简单:Java 将自定义方法作为键侦听器添加到组件,java,swing,keylistener,Java,Swing,Keylistener,我尝试使用不同的方法为swing框架中的每个组件定义单独的方法作为侦听器 对于操作侦听器,使用此签名定义私有void非常简单: private void myButtonActionListener(ActionEvent e) 并使用方法引用运算符将其分配给按钮: myButton.addActionListener(this::myButtonActionListener); 然而,它似乎不适用于关键听众。我对方法的定义如下: private void myTextBoxKeyPress
private void myButtonActionListener(ActionEvent e)
并使用方法引用运算符将其分配给按钮:
myButton.addActionListener(this::myButtonActionListener);
然而,它似乎不适用于关键听众。我对方法的定义如下:
private void myTextBoxKeyPressed(KeyEvent event)
但这行代码会引发一个错误,即“它不是一个功能接口”:
任何关于如何解决此问题的想法都不同于操作侦听器,关键侦听器有多个要实现的方法
我很清楚其他方法,如类实现侦听器或使用匿名内部类,但我更喜欢找到一种新方法来保持代码更干净
提前感谢您应该使用AbstractAction,以及JComponent.setAction或JComponent.getActionMap()
我认为这是不可能的。Java非常聪明,能够用适当的声明处理函数
myButtonActionListener
,就好像实现了实现所需接口的匿名类一样。这是唯一的原因myButtonActionListener
可以像您所描述的那样使用,因为ActionListener只需要您实现一个函数,其他什么都不需要
但是,需要实现三个(!)功能。Java无法理解您正试图“实现”这三个函数中的哪一个,因为它们的声明是相同的,即使它们是相同的,那么您仍然没有实现另外两个,这在设计上是非法的,因为您无法判断使用KeyListener的函数是否使用了它们。你绕不开它。如果需要接口的实现,那么这就是您需要提供的
为了使它更干净一点,您可以创建一个实现所需接口的对象内联。下面是一个使用Runnable接口的示例:
Runnable r = new Runnable() {
@Override
public void run() {
// do something
}
};
public MyAction extends AbstractAction {
public void actionPerformed(ActionEvent ae) {
//...
}
}
Runnable r = new Runnable() {
@Override
public void run() {
// do something
}
};