【问题标题】:How to use keyListener properly in Java如何在 Java 中正确使用 keyListener
【发布时间】:2017-02-19 05:00:25
【问题描述】:

我在尝试在 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,我不知道如何让程序等待按键被按下。

【问题讨论】:

  • 你的 main 方法是空的......不过,通常你使用带有 GUI 的 keylistener

标签: java awt keylistener


【解决方案1】:

我认为我从来没有在控制台应用程序中添加过 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);
            }
        });
    }

}

【讨论】:

    【解决方案2】:

    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); 
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      相关资源
      最近更新 更多