Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将自定义方法作为键侦听器添加到组件_Java_Swing_Keylistener - Fatal编程技术网

Java 将自定义方法作为键侦听器添加到组件

Java 将自定义方法作为键侦听器添加到组件,java,swing,keylistener,Java,Swing,Keylistener,我尝试使用不同的方法为swing框架中的每个组件定义单独的方法作为侦听器 对于操作侦听器,使用此签名定义私有void非常简单: private void myButtonActionListener(ActionEvent e) 并使用方法引用运算符将其分配给按钮: myButton.addActionListener(this::myButtonActionListener); 然而,它似乎不适用于关键听众。我对方法的定义如下: private void myTextBoxKeyPress

我尝试使用不同的方法为swing框架中的每个组件定义单独的方法作为侦听器

对于操作侦听器,使用此签名定义私有void非常简单:

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
    }
};