如何在 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的主要内容,如果未能解决你的问题,请参考以下文章