Java automatisches einfügen der Zwischenablage?
Hai, bin gerade dabei, dass ein Text, welchen ich in einer Java Applikation schreibe in einem Spiel via Tastendruck eingefügt wird (um Symbole nutzen zu können).
Ich frage mich nur noch, wie ich Java sage, dass es so zu sagen STRG + V machen soll?
Vielleicht kann mir ja einer von euch helfen :)
Danke!
2 Antworten
Falls du zusätzlich noch wissen willst wie du den Inhalt des Clipboards setzten oder auslesen kannst wüsste ich das auch noch.
Wenn du allerding nur testen willst ob STRG und V gleichzeitig gedrückt werden gibt es da eine ganz praktische Sache.
Ich gehe mal davon aus du hast einen KeyListener definiert, da müssen wir jetzt rein:
- Erstelle ein boolean Array mit der Länge der Anzahl der zeichen du du brauchst.
public static boolean[] keys = new boolean[2];
// Hier jetzt "2", man könnte bei zwei Keys auch einfach zwei boolean Variablen nehmen aber wenn man gleich mit einem Array arbeitet ist es später einfacher neue Keys hinzuzufügen
2. Diese Methode ist dafür da das oben deklarierte Array zu beschreiben. Zur funktionalität komme ich gleich.
private void setKey(short chr, boolean b){
switch(chr){
case KeyCode.VK_CONTROL: keys[0] = b;
case KeyCode.VK_V: keys[1] = b;
}
}
3. Jetzt kommt die unter stehende Zeile in die "keyPressed-" Methode
setKey(e.getKeyCode(), true);
// "e" ist dabei das KeyEvent das der keyPressed-Methode übergeben wird, das e musst du eventuel umbenennen
4. Und das kommt in die keyReleased-Methode
setKey(e.getKeyCode(), false);
// Wieder das gleiche mit dem "e"
Was da genau passiert erkläre ich jetzt einfach mal an dem Beispiel, dass jemand auf die "V" Taste drückt:
- keyPressed wird aufgerufen
- setKey wird mit dem KeyCode von "V" und dem Wert "true" aufgerufen
- Dieser Fall tritt ein: "case KeyCode.VK_V:" -> keys[1] wird auf true gesetzt
- Jetzt passiert so lange Nichts bis entweder eine weitere Taste gedrückt wird oder eine gedrückte Taste losgelassen wird.
5.1 Die Taste "1" wird gedrückt: Ergebnis nichts passiert.
5.2 Die Taste "STRG" wird gedrückt: Ergebnis keys[0] und keys[1] sind beide "true", weil beide gleichzeitig gedrückt sind.
6. Taste "V" wird los gelassen: setKey wird mit dem KeyCode von "V" und dem Wert "false" aufgerufen
7. Dieser Fall tritt ein: "case KeyCode.VK_V:" -> keys[1] wird auf "false" gesetzt
Voila, schon kann getestet werden welche Tasten gleichzeitig gedrückt sind.
Kleiner Disclaimer: Je nach dem mit welcher Library du arbeitest könnte meine Lösung nicht zu 100% klappen, dann muss man zum Beispiel "KeyCode.VK_V" zu "KeyCode.V" ändern, aber das ist eigentlich kein Problem. Wenn du mir sagst womit du arbeitest kann ich auch gerne nach den KeyCodes schauen.
Ich habe das ganze in Verbindung mit JOGL geschrieben.
Ich hoffe das beantwortet deine Frage.
LG Jesaja
Du kannst mit der Robots-Klasse Tastendrücke simulieren. Hier ein passender Artikel dazu: http://www.qaautomationsimplified.com/selenium/simulate-copy-paste-action-using-java-robot-and-clipboard-class/.
Leider nicht möglich. Vom Spiel aus ist STRG + V unterdrückt. Das Einfügen an sich jedoch nicht (woran ich arbeite gibt es bereits - deshalb muss es möglich sein).