我有一个JFrame
,我想在其中添加KeyListener
,因为我想通过输入 alt + F11 关闭它(我知道,你可以单击右上角的十字架,但我需要一个快捷方式。
所以我添加了KeyListener
:
addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_F11 && event.isAltDown()) {
dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
});
如您所见,我只需要keyPressed()
方法。但是,如果我删除keyReleased()
和keyTyped()
,我会收到此错误:
类型new KeyListener(){}必须实现继承的抽象方法KeyListener.keyReleased(KeyEvent)
有没有解决方法,或者我真的需要添加这些未使用的方法吗?
提前致谢!
答案 0 :(得分:2)
KeyListener
是一个界面。如果要实现接口,则需要实现其所有方法(因为接口不为其所有方法提供主体)。如果您查看Java API文档中的KeyListener
接口,您会发现它有3个需要实现的方法:
void keyPressed(KeyEvent e)
void keyReleased(KeyEvent e)
void keyTyped(KeyEvent e)
避免实现所有方法的解决方案之一是使用KeyAdapter
类(来自java.awt.event
包)。正如Java文档所述:
此类中的方法为空。此类存在是为了创建侦听器对象的便利。扩展此类以创建KeyEvent侦听器并覆盖感兴趣事件的方法。 (如果实现KeyListener接口,则必须定义其中的所有方法。此抽象类为它们定义了所有的null方法,因此您只需要为您关心的事件定义方法。)
因此,您可以将addKeyListener
方法修改为以下内容:
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_F11 && event.isAltDown()) {
dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
}
});
答案 1 :(得分:0)
您需要关键侦听器的所有关键事件,因为只需要程序在Java中正确编译即可。如果您不需要它们,请将这些方法留空。
答案 2 :(得分:0)
因为这是keyListener
功能。它需要包含所有这些功能。你可以使用它;
public void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_F11 && event.isAltDown()) {
dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
}