在 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

键盘扫描码 ASCII码的区别?

连击键盘方向键 安一下出现双击效果 高手给个安键精灵的脚本

键盘操作DIV

Ubuntu10.10下开发环境Monodevelop的方向键问题

键盘怎么模拟鼠标操作