为什么我无法添加密钥监听器?

时间:2016-03-23 08:44:42

标签: java keylistener

我正在尝试在我的程序中使用KeyListener。 我已将此课程添加到我的主课程中:

class CustomKeyListener implements KeyListener{
    @Override  
    public void keyTyped(KeyEvent k) {}
    @Override
    public void keyPressed(KeyEvent k) {}
    @Override
    public void keyReleased(KeyEvent k) {}    
}

但是我无法在主类中的任何位置添加addKeyListener(new CustomKeyListener())方法。 我错过了什么?

基于我之前的question我明白它只适用于图形界面。我应该添加一些任意形式,它会起作用吗?

有人能解释一下这个问题吗?

2 个答案:

答案 0 :(得分:0)

你的主类是否实现/扩展了一个实际支持你试图使用的方法的类?

关于你的主要课程是什么以及你想要实现什么的一些背景。 它可能是您需要的扫描仪吗? 如果是这样,那么请查看这里以了解如何使用它。 http://www.tutorialspoint.com/java/util/java_util_scanner.htm

这也可能有所帮助: Java using scanner enter key pressed

答案 1 :(得分:0)

您的班级应该使用addKeyListener方法。如果您的类派生自Component或JComponent,则会出现这种情况。所以你应该从这些类中派生出类,如下所示:

class MyClass extends JComponent

请注意,继承不必是直接的;如果您的类派生自(例如)JFrame,它会间接继承addKeyListener方法,因为JFrame本身是从Component派生的。

另外,正如this question的答案中所指出的那样,您的课程应该可以让Key Listener工作。

<强>更新

您在评论中写道,您尝试使用

this.addKeyListener( new CustomKeyListener( ) );

并收到错误

  

不能在静态上下文中使用它

这是因为您调用了静态方法(在这种情况下为main方法)。 this指的是该类的当前实例。在静态方法中,没有实例 - 这实际上是静态方法的定义。

你应该做的是创建一个实例:

MyClass newInstance = new MyClass( );

现在,您可以将密钥监听器添加到该实例

newInstance.addKeyListener( new CustomKeyListener( ) );

您也可以在实例方法(任何没有关键字static的方法)中执行此操作,并从您的实例调用该方法。

官方Java教程在此主题上还有一些explanation