Erkennen und Handeln auf der Tastatur Richtungstasten in Java
Frage
G'day alle,
Ich habe eine Konsole Projekt, bei dem es dem Benutzer sollte die Tastatur Richtungstasten drückt (nicht-numerische Tastatur), um einen Avatar zu bewegen. Ich habe Schwierigkeiten Codierung für die Presse dieser Schlüssel zu überprüfen. In Pascal war es einfach genug „readkey“ und Code, zum Beispiel zu verwenden, # 80 für den nach unten keypress. Allerdings bin ich ratlos, wie die gleiche Funktionalität in Java zu implementieren, obwohl ich glaube, ich verstehe die Verwendung von System.in und BufferedInputStream.
Kann jemand mir helfen? Ihre Gedanken oder Hinweise werden sehr geschätzt.
Lösung
Die Konsole Support-Problem in Java ist bekannt, ich bin nicht sicher, dass dies machbar ist.
Das mit System.in zunächst nicht möglich war, da sie zur Arbeit Linie basiert.
Sun hinzugefügt schließlich eine java.io.Console Klasse.
Hier sind seine JavaDocs: http://java.sun.com/javase/ 6 / docs / api / java / io / Console.html
Wenn Sie die Konsole bekommen (ich glaube, von System.Console), können Sie einen Leser bekommen und vielleicht Zeichen von ihm gelesen, aber ich bin mir nicht sicher, ob es enthält Tasten.
Im Allgemeinen sollen Sie Schaukel oder AWT verwenden, wenn Sie Zugriff auf die Tastatur wollen, die dumm ist.
Ab 2007 gab es eine Feature-Anfrage Informationen: hier
Andere Tipps
Wenn java.io.console nicht für Sie arbeiten (ich habe nicht versucht, dass), versuchen jline . Ich benutzte es, eine vage ähnliches Problem zu lösen.
Leider ist dies nicht möglich, in einer tragbaren Weise:
http://forums.sun.com/thread.jspa?threadID= 5351637 & messageID = 10526512
Unter Windows von System.in Lesen wird blockiert, bis enter
gedrückt wird, auch wenn Sie keinen BufferedReader
verwenden. Pfeile radeln durch die Befehls Geschichte. Versuchen Sie es selbst:
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);
}
}
}
Die gleiche Problem mit der Console
Klasse (Eingang unter Windows gepuffert, Pfeiltasten interpretiert wird von 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);
}
}
}
Nicht mit integriertem Java-Code. Check out java Flüche Bibliotheken oder jline, wie oben erwähnt, wenn Sie den Vorgang fortsetzen möchten.