如何在 Java 中正确使用 keyListener

Posted

技术标签:

【中文标题】如何在 Java 中正确使用 keyListener【英文标题】:How to use keyListener properly in Java 【发布时间】: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 【参考方案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); 


【讨论】:

以上是关于如何在 Java 中正确使用 keyListener的主要内容,如果未能解决你的问题,请参考以下文章

Java KeyListener:KeyTyped Backspace,Esc 作为输入

Java KeyListener 在小程序中不起作用

如何在 KeyListener 中调用图形方法?

如何使 KeyListener 起作用?

java keylistener 未调用

改进我的键盘输入 (KeyListener) Java