Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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:您实际上如何使用KeyListener?_Java - Fatal编程技术网

Java:您实际上如何使用KeyListener?

Java:您实际上如何使用KeyListener?,java,Java,我一直在到处寻找如何从键盘获取输入。我可以找到大量关于如何修改keylistener在按键时所做的操作的资源,我可以找到如何将其添加到swing文本行,以及关于它的大量其他内容。但是我不知道如何把它放进一个文件并使用它 现在我只想有一个main类,它的主要函数有一个无止境的循环,每次你按下一个键,它就会打印出“key uu已按下”。我该怎么做 我制作了一个MyKeyListener,它扩展了KeyAdapter,其中包括按键下字符串的system.out.print(我认为这是可行的)。但是我应

我一直在到处寻找如何从键盘获取输入。我可以找到大量关于如何修改keylistener在按键时所做的操作的资源,我可以找到如何将其添加到swing文本行,以及关于它的大量其他内容。但是我不知道如何把它放进一个文件并使用它

现在我只想有一个main类,它的主要函数有一个无止境的循环,每次你按下一个键,它就会打印出“key uu已按下”。我该怎么做

我制作了一个MyKeyListener,它扩展了KeyAdapter,其中包括按键下字符串的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());
}
这是一个我正在使用的主文件,不知道从何处开始: 导入java.awt.KeyEventDispatcher; 导入java.awt.KeyboardFocusManager; 导入java.awt.event.KeyEvent

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

keylister
是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
。通常,使用
键侦听器处理事件就足够了。

此代码的作用:

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无法工作,也没有意义。与AWT相比,更喜欢使用Swing
  • SingleKeyListener添加到具有焦点的GUI组件中
  • 认真考虑使用键绑定代替密钥监听器,以实现更大的灵活性和代码重用性。

编辑
你在评论中说,

但如果不添加文本字段,我不知道如何实际调用侦听器以使其实际存在并工作

  • 作为记录,您不应该将KeyListener与JTextComponent(如JTextField)一起使用,因为有更好更安全的方法来捕获这些组件中的输入
  • 听起来好像您需要一个通用的操作系统范围的密钥侦听器。如果是这样的话,那就错了,因为Java不容易支持这一点
  • 对于这类功能,您需要使用JNA或JNI将其绑定到操作系统中
  • 或者使用为您的应用程序提供此功能的第三方库
  • 或者结合AutoIt等实用程序,为您的应用程序提供此功能

我在临时文件中添加了我想要解决的内容。我在这里浏览了教程:但没有添加文本字段,我不知道如何真正调用侦听器以使其实际存在并工作