在 Java 中检测和操作键盘方向键
Posted
技术标签:
【中文标题】在 Java 中检测和操作键盘方向键【英文标题】:Detecting and acting on keyboard direction keys in Java 【发布时间】:2010-10-08 23:46:53 【问题描述】:万事如意,
我有一个控制台项目,旨在让用户按下键盘方向键(非数字键盘)来移动头像。我很难编码来检查这些键的按下情况。在 Pascal 中,使用“readkey”和代码很容易,例如,#80 用于向下按键。然而,我很难理解如何在 Java 中实现相同的功能,尽管我认为我了解 System.in 和 BufferedInputStream 的使用。
谁能帮帮我?非常感谢您的想法或提示。
【问题讨论】:
【参考方案1】:如果 java.io.console 对您不起作用(我没有尝试过),请尝试 JLine。我用它解决了一个vaguely similar problem。
【讨论】:
JLine 绝对是要走的路,现在还在!【参考方案2】:Java 中的控制台支持问题众所周知,我不确定这是否可行。
这在 System.in 最初是不可能的,因为它曾经是基于行的。
Sun 最终添加了一个 java.io.Console 类。
这里是它的 JavaDocs: http://java.sun.com/javase/6/docs/api/java/io/Console.html
一旦你得到了控制台(我认为是从 System.console 获得的),你就可以得到一个阅读器,也许可以从中读取字符,但我不确定它是否包含键。
一般来说,如果你想使用键盘,你应该使用 Swing 或 AWT,这很愚蠢。
截至 2007 年,有一个关于它的功能请求:here
【讨论】:
非常感谢。然后我可能会回到 Pascal,或者尝试在 Swing 中实现我的项目。 不要回到帕斯卡。 Java 有很多好处。控制台应用程序主要将控制台用于基于行的输出和输入,它们并不意味着完全交互,这是 Pascal 仍然支持的 DOS 异常。 由于大多数情况下您的程序在 GUI 操作系统中运行,如果您想做基于文本的工作,您可以使用 swing 并使用像控制台一样仅显示文本的画布。【参考方案3】:不幸的是,这在便携方式中是不可能的:
http://forums.sun.com/thread.jspa?threadID=5351637&messageID=10526512
在 Windows 上,从 System.in 读取将被阻止,直到按下 enter
,即使您不使用 BufferedReader
。箭头将在命令历史记录中循环。自己试试吧:
import java.io.*;
public class KeyTest
public static void main(String[] argv)
try
InputStreamReader unbuffered = new InputStreamReader(System.in);
for (int i = 0; i < 10; ++i)
int x = unbuffered.read();
System.out.println(String.format("%08x", x));
catch (Exception e)
System.err.println(e);
使用Console
类(在 Windows 下缓冲输入,由 Windows 解释的箭头键)的相同问题:
import java.io.*;
public class KeyTest2
public static void main(String[] argv)
try
Console cons = System.console();
if (cons != null)
Reader unbuffered = cons.reader();
for (int i = 0; i < 10; ++i )
int x = unbuffered.read();
System.out.println(String.format("%08x", x));
catch (Exception e)
System.err.println(e);
【讨论】:
【参考方案4】:不适用于内置 Java 代码。如果您想继续,请查看上面提到的 java curses 库或 JLine。
【讨论】:
以上是关于在 Java 中检测和操作键盘方向键的主要内容,如果未能解决你的问题,请参考以下文章
Atitit。监听键盘上下左右方向键事件java js jquery c#.net