KeyListener的不响应键盘输入(KeyListener not responding to

2019-10-18 19:29发布

我一直在试图了解我自己更高级的Java(我班只覆盖文本文件),我难倒上使用的KeyListener。 我设法得到它在另一个程序的工作,但我不能在这里找到问题。 没有错误显示在控制台上。 该方案采用了机器人在文本文件中键入预定义的字符串。 这里的主类。

    import java.awt.AWTException;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;

    import javax.swing.SwingUtilities;


    public class FileTyper implements KeyListener {

static Keyboard kb;
static Scanner infile;
static boolean on = false;
static Window window;

public static void main(String args[]) throws AWTException, FileNotFoundException{
    init();
    start();
}
private static void init() throws AWTException, FileNotFoundException{
    window = new Window();
    kb = new Keyboard();
    kb.setSpeed(50);
    infile = new Scanner(new File("C:/Users/Ali/Desktop/input.txt"));

}
private static void start(){
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {

            if(on && infile.hasNext()){
                String temp = infile.nextLine();
                kb.type(temp);
                kb.type("\n");
            }
        }
    });
}

@Override
public void keyPressed(KeyEvent e) {

}

@Override
public void keyReleased(KeyEvent e) {
    switch(e.getKeyCode()) {
    case KeyEvent.VK_F9:
        System.out.println("CONSOLE: Starting");
        on = true;
        break;
    case KeyEvent.VK_F10:
        System.out.println("CONSOLE: Stopping");
        on = false;
        break;
    }

}

@Override
public void keyTyped(KeyEvent e) {

}

}

Answer 1:

  • 对于KeyListener的工作,你必须首先通过它添加到组件addKeyListener(...) 你不这样做,它不会工作,除非它有一个机会。
  • 作为camickr笔记,一个KeyListener的要求组件它侦听具有焦点。
  • 通常,最好不要使用在Swing应用程序KeyListeners但使用按键绑定 。
  • 射击,你甚至没有任何形式的可视GUI可言,所以你真正需要做的教程学习更先得到你的GUI起来,甚至考虑加入的KeyListener或使用按键绑定之前运行。

编辑
幽州:

如果我想使用的KeyListener最小化程序窗口时?
我的意思是使用快捷键暂停启动或停止程序

通过自身核心Java无法做到这一点。 对于这个工作,您可能需要增加Java的使用JNI或JNA或使用操作系统特定的应用程序。 我使用的AutoIt我的Windows应用程序。



Answer 2:

不相关的问题,但没有使用静态方法和变量。 这表明一个糟糕的设计。

如果KeyListener的不工作,那么您的组件可能不具有焦点。

另外,你真正需要的的KeyListener添加到您的组件。 通过读取Swing指南开始如何写一个按键侦听器 。 这个例子应该帮助你,也告诉你一个更好的方式来设计你的程序,所以你不要使用静态无处不在。



文章来源: KeyListener not responding to keyboard input