如何在Java中正确使用keyListener

时间:2016-10-10 17:46:40

标签: java awt keylistener

我在尝试在java中使用KeyListener时遇到了问题 我正在尝试编写一个程序,该程序一直运行直到按下一个键,然后输出该键 这是更精细代码的踏脚石,因此使用方法打印按下的键只是用作一种原型。

以下是代码:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class keylistener implements KeyListener{
    public keylistener(){
        addKeyListener(this);
    }

    public void keyPressed(KeyEvent e){
        int key = e.getKeyCode();
        keylistener output = new keylistener();
        output.print(key);
    }

    public void keyReleased(KeyEvent e){}
    public void keyTyped(KeyEvent e){}

    public void print(int key){
        System.out.println(key);
    }

    public static void main(String[] args){
    }
}

程序运行然后直接结束。
我之前从未使用过KeyListener,我无法弄清楚如何使程序等待按下键。

2 个答案:

答案 0 :(得分:1)

KeyListener旨在用于GUI应用程序,而不是用于控制台应用程序,因为KeyListener需要运行GUI组件。通常在控制台应用程序中,您将使用BufferedReader和InputStreamReader。

这是一个控制台应用程序,演示了使用带有BufferedReader和InputStreamReader的while循环以保持应用程序运行等待输入的想法。虽然还有其他方法可以做到这一点。我明确表达了这一点,因此你可以掌握这个概念。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class StackStuff {

public static void main(String[] args) throws IOException {
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
     boolean runs = true ;
     System.out.println("Press any key to kill this app...");
     while(runs){
          input =br.readLine();
         if (!(input==null)){
             System.out.println(input);
             runs=false;
          }
         }
     System.out.println("I am dead!!");
     System.exit(0); 

}

答案 1 :(得分:0)

我认为我没有将KeyListener添加到控制台应用程序中,(可能是因为KeyListener是AWT包的一部分,主要有GUI组件),但这里有一个示例GUI应用程序演示。

您的第一个问题是,您应该已将new keylistener()添加到main方法中,但必须将添加到组件本身才能成为跑了。

public class GuiMain extends JFrame { // A GUI Frame

    public GuiMain() {
        // Add the listener
        this.addKeyListener(new KeyAdapter() { 
            @Override
            public void keyPressed(KeyEvent e) {
                super.keyPressed(e);
                // Print out the code
                System.out.println(e.getKeyCode());
            }
        });

        // Show something
        add(new JLabel("Hello World!"));
        pack();
    }

    public static void main(String[] args) {
        // Run the GUI
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                GuiMain gui = new GuiMain();
                gui.setVisible(true);
            }
        });
    }

}