在Java中检测并操作键盘方向键

时间:2009-02-21 02:42:20

标签: java keyboard key direction

G'day all,

我有一个控制台项目,用户可以按下键盘方向键(非数字键盘)来移动头像。我编码很难检查这些键的按键。在Pascal中,使用“readkey”和代码很容易,例如,#80用于向下按键。但是,我很难理解如何在Java中实现相同的功能,尽管我认为我理解使用System.in和BufferedInputStream。

有人可以帮帮我吗?非常感谢您的想法或提示。

4 个答案:

答案 0 :(得分:6)

如果java.io.console不适合您(我还没试过),请尝试JLine。我用它来解决vaguely similar problem

答案 1 :(得分:5)

不幸的是,以便携方式无法做到这一点:

http://forums.sun.com/thread.jspa?threadID=5351637&messageID=10526512

在Windows上,即使您不使用enter,从System.in读取也会阻止按下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);
    }
  }
}

答案 2 :(得分:4)

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

答案 3 :(得分:0)

不适用于内置Java代码。如果要继续,请按如上所述检查Java curses库或JLine。