Java:你如何实际使用KeyListener?

时间:2013-12-21 11:02:52

标签: java

我一直在搜索如何从键盘输入信息。我可以找到大量资源来了解如何修改keylistener在按键上的功能,我可以找到如何将它添加到swing文本行,还有很多关于它的其他杂项。但我无法找到如何将其实际放入文件并使用它。

现在我只想要一个主要功能只有一个无限循环的主类,每次按下一个键就会打印"键_已被按下"。我该怎么做?

我做了一个扩展KeyAdapter的MyKeyListener,其中包含keyPressed下字符串的system.out.print(我认为这是可行的)。但是我要在主类中实际使用它呢?包括它和初始化还不够。

这是我的关键监听器文件:`

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class GKeyListener extends KeyAdapter {

public void keyPressed(KeyEvent e){
    System.out.println("Key Pressed: " + e.getKeyChar());
}
public void keyReleased(KeyEvent e){
    System.out.println("Key Released: " + e.getKeyChar());
}
public void keyTyped(KeyEvent e){
    System.out.println("Key Typed: " + e.getKeyChar());
}

这是我正在使用的主要文件,并且不知道从哪里开始:     import java.awt.KeyEventDispatcher;     import java.awt.KeyboardFocusManager;     import java.awt.event.KeyEvent;

public class tempMain {
public static void main(String[]  args){
    while(true){
        GKeyListener listen =new GKeyListener();
        //addKeyListener(listen);
    }
}

2 个答案:

答案 0 :(得分:0)

KeyListener是Java AWT GUI框架的一个类。它是AWT事件处理系统的一部分,例如用于捕获文本输入组件的关键事件(例如TextArea,TextField等)。

没有组件,使用KeyListener没有多大意义。

如果您想进行一些实验,可以使用KeyboardFocusManager捕获没有文本输入组件的键输入。此示例显示了将KeyListener绑定到文本组件并使用全局KeyboardFocusManager

public class KeyExample extends JFrame {
    public KeyExample() {
        JTextField jTextField = new JTextField(20);
        jTextField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyTyped(KeyEvent e) {
                System.out.println("KeyListener: " + e.getKeyChar());
            }
        });
        add(jTextField);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() {
            @Override
            public boolean dispatchKeyEvent(KeyEvent e) {
                System.out.println("KeyEventDispatcher: " + e.getKeyChar());
                return false;
            }
        });
        new KeyExample().setVisible(true);
    }
}

您应该仅在极少数情况下使用KeyboardFocusManager。通常,使用KeyListener处理事件就足够了。

答案 1 :(得分:0)

此代码的作用:

public class tempMain {
public static void main(String[]  args){
    while(true){
        GKeyListener listen =new GKeyListener();
        //addKeyListener(listen);
    }
}

重复创建一个KeyListener,数千次!它对使用的KeyListener没有任何作用,并且只在需要时才创建数千个KeyListener。相反,你应该考虑以下几点:

  • 首先创建一个GUI。没有Swing或AWT GUI,KeyListener不起作用,没有意义。更喜欢使用Swing over AWT。
  • Single KeyListener添加到具有焦点的GUI组件中。
  • 认真考虑使用Key Bindings代替KeyListener,以获得更大的灵活性和代码可重用性。

修改
你在评论中说明,

  

但是没有添加文本字段我不确定如何实际调用侦听器实际存在并且正在工作

  • 对于记录,您永远不应该使用带有JTextComponent的KeyListener,例如JTextField,因为有更好,更安全的方法来捕获这些组件中的输入。
  • 听起来好像你想要一个通用的OS范围的密钥监听器。如果是这样,你就会咆哮错误的树,因为Java不容易支持这个。
  • 对于这种功能,您需要使用JNA或JNI绑定到操作系统。
  • 或使用为您的应用提供此功能的第三方库
  • 或绑定到AutoIt等实用程序,为您的应用程序提供此功能。