Erhalte den VK int von einem beliebigen Zeichen in Java

8

Wie erhalten Sie den VK-Code von einem Zeichen, das ein Buchstabe ist? Es scheint, als ob du etwas wie javax.swing.KeyStroke.getKeyStroke('c').getKeyCode() machen kannst, aber das funktioniert nicht (das Ergebnis ist Null). Jeder weiß, wie man den Schlüsselcode bekommt, wenn Sie bereits ein KeyEvent haben, aber was, wenn Sie nur Zeichen in VK-Ints verwandeln wollen? Ich bin nicht daran interessiert, den FK-Code für seltsame Zeichen zu bekommen, nur [A-Z], [a-z], [0-9].

Kontext dieses Problems -------- Alle Roboter-Tutorials, die ich gesehen habe, gehen davon aus, dass Programmierer es lieben, Wörter auszusprechen, indem sie Key-Prints mit VK-Codes senden:

%Vor%

Nennt mich faul, aber selbst mit Eclipse ist das kein Weg, TDD auf GUIs zu verwenden. Wenn jemand zufällig eine Robot-ähnliche Klasse kennt, die Strings nimmt und dann Benutzereingaben für diese Strings simuliert (ich benutze FEST ), würde ich gerne wissen.

    
P. Myer Nore 20.03.2009, 03:37
quelle

8 Antworten

5

Vielleicht dieser hässliche Hack:

%Vor%

keyTextToCode würde dann die Zuordnung von Strings (z.B. "A" oder "PAGE_UP") zu vk-Codes enthalten.

    
fulkod 20.03.2009, 07:43
quelle
6
%Vor%

Geringfügige Erläuterung von Paces Antwort . Es sollte einfache Anführungszeichen sein (die ein Zeichen darstellen), keine doppelten Anführungszeichen (die eine Zeichenkette darstellen).

Durch doppelte Anführungszeichen wird eine java.lang.IllegalArgumentException ausgelöst (String ist falsch formatiert).

    
pR0Ps 05.11.2010 20:40
quelle
4
%Vor%     
Pace 22.10.2010 21:41
quelle
2

Ich verwende den folgenden Code für Großbuchstaben und Zahlen in einer Klasse, die ich geschrieben habe, um Robot zu erweitern:

%Vor%

Im Grunde habe ich nur die Werte von KeyEvent.VK_whatever betrachtet und die entsprechenden Berechnungen in meinem Code durchgeführt.

    
bananaman42 29.06.2011 16:44
quelle
1

Ich glaube nicht, dass es eine einfache Antwort dafür gibt.

Stellen Sie zuerst fest, dass Java zwei Byte-Zeichen und nicht annähernd 2 ^ 16 KeyEvent.VK_s definiert hat. Es wird also Zeichen geben, für die kein KeyEvent generiert werden kann.

Auch C und c und Ç und ç haben alle die gleiche KeyEvent.getKeyCode() == KeyEvent.VK_C .

    
Clint 20.03.2009 05:11
quelle
1

Die Antwort von Adam Paynter (beantwortet auf die Frage String in KeyEvents konvertieren ) sollte auch arbeite hier. Die einfache aber funktionierende Idee ist, einen großen Schalter wie den folgenden zu haben:

%Vor%

Siehe die ursprüngliche Antwort für die gesamte Auflistung (einschließlich der umgebenden Dienstprogrammklasse).

    
Touko 29.04.2011 10:45
quelle
1

Wenn Ihr primäres Ziel ist, die Buchstaben so schnell wie möglich zu schreiben, können Sie tun, was ich getan habe, um eine Zeichenfolge in die Zwischenablage zu schreiben, und dann einfach die Robot -Klasse verwenden, um Strg + V einzugeben.

%Vor%

Es gibt einige andere Funktionen in der Systemzwischenablage, mit denen Sie Daten in der Zwischenablage speichern und wiederherstellen können, falls Sie es benötigen. Wenn Sie die Geschwindigkeit zwischen den einzelnen Zeichen steuern möchten, können Sie jeden Buchstaben mit einem robot.delay(n); dazwischen in die Zwischenablage schreiben, indem Sie eine foreach-Schleife verwenden.

    
Starwarswii 25.01.2015 06:29
quelle
0

Es gibt zwei Möglichkeiten, die ich gefunden habe:

A. Verwenden Sie eine Problemumgehung von JButton.setMnemonic, getMnemonic:

%Vor%

B. Laden Sie die geöffnete jdk-Quelle herunter und sehen Sie sich deren AbstractButton.setMnemonic (char) -Methode an. Dieser Code ist unter GPL2 lizensiert, aber diese 4 Zeilen entsprechen im Allgemeinen der Antwort mit "keyPress (48+ (int) c)".

Ссылка

    
Jarekczek 09.10.2011 14:58
quelle