Ich schreibe ein Basisprogramm, das den Benutzer auffordert, einen String einzugeben, und ich versuche, einen Roboter (von java.awt.Robot
) zu verwenden, der diese Nachricht nach einer Verzögerung in ein anderes Dokument zurückgibt . Das Problem, das ich jetzt habe, ist, dass ich konvertieren muss, was auch immer ich von message.charAt(i)
zu einem KeyEvent.VK_[insert Char]
KeyCode bekomme. Gibt es einen besseren Weg, um das zu tun, was ich versuche? Ich nehme an, ich könnte immer nur eine massive Switch-Anweisung haben, die den richtigen KeyCode bekommt, aber ich hatte gehofft, dass es einen eleganteren Weg geben würde. Mein erster Gedanke, nachdem ich eine Weile Python gemacht hatte, bestand darin, eine Zeichenkette "KeyEvent.VK_" + message.charAt(i)
zu erstellen und diese irgendwie in Code umzuwandeln, aber ich denke, der einzige Weg, dies zu tun, ist die Verwendung von Reflection, von der abgeraten wird.Konvertieren eines Zeichenzeichens in Java KeyEvent KeyCode
Antwort
Sie könnten etwas aus mit dieser Arbeit:
KeyStroke ks = KeyStroke.getKeyStroke('k', 0);
System.out.println(ks.getKeyCode());
oder einfach nur benutzen:
private void writeString(String s) {
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isUpperCase(c)) {
robot.keyPress(KeyEvent.VK_SHIFT);
}
robot.keyPress(Character.toUpperCase(c));
robot.keyRelease(Character.toUpperCase(c));
if (Character.isUpperCase(c)) {
robot.keyRelease(KeyEvent.VK_SHIFT);
}
}
robot.delay(delay);
}
Woher kommt 'Characterrobot'? – Ryan
Oh, tut mir leid, ich habe einen Wrapper für die Cahracter-Klasse benutzt und die Eclipse muss "Thougt" haben, ich will sie dort benutzen: D Ich habe sie korrigiert. – Wolfii
Der KeyStroke-Weg scheint "getKeyStroke (int, int)" statt "getKeyStroke (Character, int)" aufzurufen. –
Wenn ich ein Unicode-Zeichen und alles, was ich will, ist die Tasten für sie zu wissen, dann Ich benutze
int keyCode = KeyEvent.getExtendedKeyCodeForChar(charCode);
Ich habe nie eine andere, kompliziertere Art und Weise, dies zu tun benötigt.
Ich habe diese Funktion nicht. In welcher Version von Java sind Sie? – phreakhead
Es ist Java7 ... aber Sie können es einfach verwenden, um alle möglichen Werte zu durchlaufen und zum Beispiel eine Eigenschaften-MAP zu erstellen, die Sie in früheren Versionen verwenden konnten. –
@phreakhead, stellen Sie sicher, dass Sie die richtige KeyEvent-Klasse importieren. Sie möchten 'java.awt.event.KeyEvent'. Als ich diese Methode zum ersten Mal ausprobiert habe, hat meine IDE eine andere mit Java gepackt! – Jason
Reflexion verwenden!
KeyEvent.class.getField("VK_"+keyName);
(int) KeyEvent.class.getField ("VK _" + Schlüsselname) .getInt (null); –
Viel ausführlicher aber anpassbarer
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Map;
public class AsciiKeyTyper {
private Map<Character,KeyStroke> strokeMap;
private Robot robot;
public AsciiKeyTyper() throws AWTException{
robot=new Robot();
//initialize a map from the input char to the keystroke,
//using the fact that sometimes the KeyEvent key codes correspond to ASCII
strokeMap=new HashMap<Character,KeyStroke>(){
private static final long serialVersionUID = 1L;{
put('\n',new KeyStroke(KeyEvent.VK_ENTER,false));
put('\t',new KeyStroke(KeyEvent.VK_TAB,false));
put('\r',new KeyStroke(KeyEvent.VK_HOME,false));
put(' ',new KeyStroke(KeyEvent.VK_SPACE,false));
put('!',new KeyStroke(KeyEvent.VK_1,true));
put('"',new KeyStroke(KeyEvent.VK_QUOTE,true));
put('#',new KeyStroke(KeyEvent.VK_3,true));
put('$',new KeyStroke(KeyEvent.VK_4,true));
put('%',new KeyStroke(KeyEvent.VK_5,true));
put('&',new KeyStroke(KeyEvent.VK_7,true));
put('\'',new KeyStroke(KeyEvent.VK_QUOTE,false));
put('(',new KeyStroke(KeyEvent.VK_9,true));
put(')',new KeyStroke(KeyEvent.VK_0,true));
put('*',new KeyStroke(KeyEvent.VK_8,true));
put('+',new KeyStroke(KeyEvent.VK_EQUALS,true));
put(',',new KeyStroke(KeyEvent.VK_COMMA,false));
put('-',new KeyStroke(KeyEvent.VK_MINUS,false));
put('.',new KeyStroke(KeyEvent.VK_PERIOD,false));
put('/',new KeyStroke(KeyEvent.VK_SLASH,false));
for(int i=(int)'0';i<=(int)'9';i++){
put((char)i,new KeyStroke(i,false));
}
put(':',new KeyStroke(KeyEvent.VK_SEMICOLON,true));
put(';',new KeyStroke(KeyEvent.VK_SEMICOLON,false));
put('<',new KeyStroke(KeyEvent.VK_COMMA,true));
put('=',new KeyStroke(KeyEvent.VK_EQUALS,false));
put('>',new KeyStroke(KeyEvent.VK_PERIOD,true));
put('?',new KeyStroke(KeyEvent.VK_SLASH,true));
put('@',new KeyStroke(KeyEvent.VK_2,true));
for(int i=(int)'A';i<=(int)'Z';i++){
put((char)i,new KeyStroke(i,true));
}
put('[',new KeyStroke(KeyEvent.VK_OPEN_BRACKET,false));
put('\\',new KeyStroke(KeyEvent.VK_BACK_SLASH,false));
put(']',new KeyStroke(KeyEvent.VK_CLOSE_BRACKET,false));
put('^',new KeyStroke(KeyEvent.VK_6,true));
put('_',new KeyStroke(KeyEvent.VK_MINUS,true));
put('`',new KeyStroke(KeyEvent.VK_BACK_QUOTE,false));
for(int i=(int)'A';i<=(int)'Z';i++){
put((char)(i+((int)'a'-(int)'A')),new KeyStroke(i,false));
}
put('{',new KeyStroke(KeyEvent.VK_OPEN_BRACKET,true));
put('|',new KeyStroke(KeyEvent.VK_BACK_SLASH,true));
put('}',new KeyStroke(KeyEvent.VK_CLOSE_BRACKET,true));
put('~',new KeyStroke(KeyEvent.VK_BACK_QUOTE,true));
}};
}
public void typeKey(char key){
try{
strokeMap.get(key).type();
}catch(NullPointerException ex){
System.err.println("'"+key+"': no such key in mappings");
}
}
private class KeyStroke{
int code;
boolean isShifted;
public KeyStroke(int keyCode,boolean shift){
code=keyCode;
isShifted=shift;
}
public void type(){
try{
if (isShifted) {
robot.keyPress(KeyEvent.VK_SHIFT);
}
robot.keyPress(code);
robot.keyRelease(code);
if (isShifted) {
robot.keyRelease(KeyEvent.VK_SHIFT);
}
if(code==KeyEvent.VK_ENTER){
robot.keyPress(KeyEvent.VK_HOME);
robot.keyRelease(KeyEvent.VK_HOME);
}
}catch(IllegalArgumentException ex){
String ch="";
for(char key:strokeMap.keySet()){
if(strokeMap.get(key)==this){
ch=""+key;
break;
}
}
System.err.println("Key Code Not Recognized: '"+ch+"'->"+code);
}
}
}
}
- 1. Konvertieren eines Zeichens in keycode
- 2. Verwenden eines KeyEvent in einer Methode
- 3. JavaFX KeyCode für Prozent (%)
- 4. Keycode auf Keydown Ereignis
- 5. Verwenden Sie mehr als ein KeyEvent in Android
- 6. JavaFX stop KeyEvent nach Erhalt nur eines alphanumerischen Zeichens
- 7. ReactJS keyevent funktioniert nicht
- 8. KeyCode in GotFocus-Ereignis erhalten?
- 9. konsistente keyCode für `#`
- 10. KeyCode für Windows-Schlüssel?
- 11. JavaFX KeyEvent gibt KeyCode.UNDEFINED zurück
- 12. Kann in JavaFX nicht auf KeyEvent hören
- 13. Wie ignoriere ich ein keyEvent in Javascript?
- 14. Trigger Numpad (rechts) Enter click KeyEvent
- 15. KeyEvent zu stoppen JavaFX Zuhören
- 16. Java Static Verschachtelte Typ Semantic
- 17. Konvertieren der Metadaten eines Bildes nach JSON in Java
- 18. Konvertieren eines Java System.currentTimeMillis() bis zum Datum in Python
- 19. Konvertieren eines PKCS # 8 privaten Schlüssels zu PEM in Java
- 20. Java: Konvertieren eines Satzes in ein Array für String-Darstellung
- 21. Konvertieren eines TIFF in ein gepuffertes Bild (Java)
- 22. Konvertieren Griechisch Versalien in Java
- 23. Switch jQuery onClick to keyCode
- 24. Was ist der keyCode für "$"?
- 25. konvertieren base64 in PDF in Java
- 26. Konvertieren von Text in binär in Java
- 27. Wie auf geting die keyCode auf Tastendruck auf froala Editor keyCode in froala
- 28. var keycode = window.event.keycode auf Firefox
- 29. Umgang mit KeyEvents in Java
- 30. Konvertieren eines RGB-Farbwerts in ein Hexadezimal
Ah, sollte dies einfacher sein, dann ist es. Das größere Problem, das Sie haben werden, ist, dass verschiedene Tastaturlayouts ändern, welche Kombination von Schlüsseln erforderlich ist, um "erweiterte" Schlüsselstriche (wie "shift + ...") einzuschließen. Das andere Problem ist, dass ein "A" und ein "a" derselbe virtuelle Schlüssel sind, was sie voneinander abstößt, ist das Hinzufügen der "Shift" -Taste. Werfen Sie einen Blick auf [this] (http://stackoverflow.com/questions/14572270/how-can-i-perfectly-simulate-keyevents/14615814#14615814) für eine Vorstellung von den Problemen, denen Sie gegenüberstehen. – MadProgrammer