2009-06-18 4 views
2

i m das Tastaturereignis auf Roboter Objects ....Schlüsselereignisse

aber jedes Mal, wenn ich individuell die Schlüssel zu spezifizieren habe .... wie

Roboter r = new Robot(); r.KeyPress (KeyEvent.VK_A); r.KeyPress (KeyEvent.VK_B); r.KeyPress (KeyEvent.VK_C); r.KeyPress (KeyEvent.VK_D);

Gibt es irgendeine Technik, um jede Taste zu bekommen/zu erkennen .... nicht durch individuelle Angabe ....? i m den Schlüsselcode vom Server-Seite in keyCode variable recieving .... so kann ich diese Variable verwenden direkt inplace von "KeyEvent.VK_D" wie r.keyPress (keyCode); Bitte sagen Sie mir ....

Antwort

1

Die Schlüsselkennung ist nur ein Int-Wert. Wenn der Serverwert mit dem Java-Wert übereinstimmt, wird der Wert direkt eingegeben. Andernfalls müssen Sie eine Zuordnung erstellen, bei der der Serverwert auf den Java-Schlüsselwert verweist.

Ich hatte das gleiche Problem während der Konvertierung zwischen C++ Qt-Schlüsselereignissen und Java Key-Ereignissen. Der Wert stimmt auch nicht überein. Ich musste dafür ein Mapping erstellen.

Werfen Sie einen Blick auf die Klasse KeyEvent. Jeder Schlüssel ist mit einem int-Wert aufgelistet. Sie müssen überprüfen, ob der Wert, den Sie vom Server erhalten, mit diesem int-Wert übereinstimmt. Wenn der Serverwert nicht übereinstimmt, müssen Sie eine Map erstellen. Der Kartenschlüssel ist der Serverwert und der Kartenwert ist der entsprechende KeyEvent-Wert für die gedrückte Taste.

Wenn die Werte übereinstimmen, müssen Sie keine Karte erstellen. Sie können den Serverwert direkt für den Robot-Befehl verwenden.

+0

wie hast du das mapping .... zwischen keyevents gemacht .... kannst du mir bitte sagen ...? –

+1

Wie Markus schrieb, müssen Sie java.util.Map erstellen und einen Eintrag für jeden Schlüssel hinzufügen. –

0

Ähm ... ja? Die Konstanten in KeyEvent.VK_D dienen lediglich Ihrer Bequemlichkeit. Es ist absolut nicht falsch, numerische Werte von woanders zu verwenden, solange dieselben Werte für die gleichen Schlüssel verwendet werden.

+0

ya ich hatte versucht, was du sagst ..... aber statt "KeyEvent.VK_D" sein ASCII-Wert 100 funktioniert nicht ..... plz lösen dieses Problem ... –

+1

Sie können nicht direkt ASCII-Werte verwenden, müssen Sie Ordnen Sie sie den entsprechenden Tastencodes zu. –

0

Wenn ich Ihre Frage richtig verstanden habe, versuchen Sie, diese Aktion immer dann auszuführen, wenn eine Taste gedrückt wird. Obwohl ich bezweifle, dass ich Ihre Frage richtig lese, wäre die Lösung dafür, KeyEvent.KEY_PRESSED zu verwenden, und wenn Sie eine Aktion wünschen oder eine Variable setzen, wenn ein Schlüssel freigegeben wird, wäre es KeyEvent.KEY_RELEASED. Obwohl, ich bin ein bisschen verwirrt. Möchten Sie wirklich, dass die gleiche Aktion ausgeführt wird, wenn jede Taste gedrückt wird oder möchten Sie ein eindeutiges Ereignis für eine Reihe von Tasten?