Aus Xojo (ehemals RealBasic) kenne ich z.B. die Funktionen Keyboard.AsyncControlKey() as boolean Keyboard.AsyncAltKey() as boolean Keyboard.AsyncShiftKey() as boolean die liefern bei Aufruf den Zustand der Steuerungstasten (Shift, Alt, Strg) ohne Event. D.h. ich kann z.B. ein Programm auch mit gehaltener Alt-Taste starten und darauf entsprechend reagieren (z.B. default preferences verwenden) oder eben irgendwo im Code deren Status abfragen. Bei Java kenne ich bisher nur die dynamisch reagierenden Listener ... gibts etwas Vergleichbares zur statischen Abfrage der Tasten auch in Java?
Der Listener kann doch einfach eine class-Variabele setzen (z.B. bool isControlKeyPressed) die du dann nach Lust und Laune abfragen kannst?
Eric B. schrieb: > Der Listener kann doch einfach eine class-Variabele setzen (z.B. > bool > isControlKeyPressed) die du dann nach Lust und Laune abfragen kannst? Ich haben doch genau beschrieben, warum das m.E. nicht reicht. Also nochmal anders: Ein Java-Listener reagiert nur auf dynamische Vorgänge, wie das Drücken (key down) oder Loslassen (key release) einer Taste. Zudem haben die Control-Tasten (Shift, Alt, Crtl) keine Tastenwiederholung und lösen ohne "Begleittaste" (z.B. Alt+A) m.W. keinen Event aus. Auch bekommt ein Listener nichts davon mit, wenn eine Taste vor dem Programmstart gedrückt wurde und während des Programmstarts gedrückt bleibt ...
:
Bearbeitet durch User
Hallo, ich habe ein Programm, bei dem zu Beginn einiges an Sensorik abgefragt wird. Um das zu überspringen, muss die CTRL-Taste gedrückt werden. Meinem Hauptfenster (JFrame) habe ich einen Listener verpasst:
1 | hauptFenster.addKeyListener((KeyListener) new hauptFensterCTRLLauscher()); |
Und hier der Listener:
1 | public class hauptFensterCTRLLauscher implements KeyListener |
2 | { |
3 | @Override |
4 | public void keyPressed(KeyEvent arg0) |
5 | { |
6 | if(arg0.isControlDown()) initAbbbrechen = true; |
7 | } |
8 | |
9 | @Override |
10 | public void keyReleased(KeyEvent arg0) |
11 | { |
12 | |
13 | } |
14 | |
15 | @Override |
16 | public void keyTyped(KeyEvent arg0) |
17 | { |
18 | |
19 | } |
20 | |
21 | } |
Anders habe ich es nicht hinbekommen. Holger
:
Bearbeitet durch User
Frank E. schrieb: > Auch bekommt ein > Listener nichts davon mit, wenn eine Taste vor dem Programmstart > gedrückt wurde und während des Programmstarts gedrückt bleibt ... Es ist normalerweise IMMER so, daß ein Programm nicht weiß was für Tasten gedrückt wurden bevor es gestartet wurde. Und zum Thema "Taste gedrückt halten" wurde dir ein prima Tipp gegeben Event<KeyPressed> -> boolean keyPressed = true, Event<KeyReleased> -> boolean keyPressed = false.
Frank E. schrieb: > Aus Xojo (ehemals RealBasic) kenne ich z.B. die Funktionen > > Keyboard.AsyncControlKey() as boolean > Keyboard.AsyncAltKey() as boolean > Keyboard.AsyncShiftKey() as boolean > > die liefern bei Aufruf den Zustand der Steuerungstasten (Shift, Alt, > Strg) ohne Event. D.h. ich kann z.B. ein Programm auch mit gehaltener > Alt-Taste starten und darauf entsprechend reagieren (z.B. default > preferences verwenden) oder eben irgendwo im Code deren Status abfragen. Wenn ich dieses Verhalten so haben wollen würde, würde ich mir eine Klasse schreiben die es nachahmt.
Holger D. schrieb: > Hallo, ich habe ein Programm, bei dem zu Beginn einiges an > Sensorik > abgefragt wird. Um das zu überspringen, muss die CTRL-Taste gedrückt > werden. > > Meinem Hauptfenster (JFrame) habe ich einen Listener verpasst: > hauptFenster.addKeyListener((KeyListener) new > hauptFensterCTRLLauscher()); ... > > Anders habe ich es nicht hinbekommen. Interessante Idee. Wenn ich es recht verstehe, gehst du davon aus, dass das startende jar-File den Tastenzustand von der JRE als Prameter mitbekommt ... Werde ich ausprobieren. Danke.
Wühlhase schrieb: > Frank E. schrieb: >> Aus Xojo (ehemals RealBasic) kenne ich z.B. die Funktionen >> >> Keyboard.AsyncControlKey() as boolean >> Keyboard.AsyncAltKey() as boolean >> Keyboard.AsyncShiftKey() as boolean >> >> die liefern bei Aufruf den Zustand der Steuerungstasten (Shift, Alt, >> Strg) ohne Event. D.h. ich kann z.B. ein Programm auch mit gehaltener >> Alt-Taste starten und darauf entsprechend reagieren (z.B. default >> preferences verwenden) oder eben irgendwo im Code deren Status abfragen. > > Wenn ich dieses Verhalten so haben wollen würde, würde ich mir eine > Klasse schreiben die es nachahmt. Sorry, aber diese absolute Null-Info hättest du dir auch sparen können. Wenn ich durch die Tür will, mache ich sie vorher auf ... meistens jedenfalls.
Wühlhase schrieb: > Frank E. schrieb: >> Auch bekommt ein >> Listener nichts davon mit, wenn eine Taste vor dem Programmstart >> gedrückt wurde und während des Programmstarts gedrückt bleibt ... > > Es ist normalerweise IMMER so, daß ein Programm nicht weiß was für > Tasten gedrückt wurden bevor es gestartet wurde. > Echt jetzt? Ich schrieb aber nicht von "gedrückt wurden", sondern von "gedrückt werden" bzw. "gedrückt sind". > Und zum Thema "Taste gedrückt halten" wurde dir ein prima Tipp gegeben > Event<KeyPressed> -> boolean keyPressed = true, Event<KeyReleased> -> > boolean keyPressed = false. Ja, das habe ich dankend zur Kenntnis genommen, werde es ausprobieren und verwenden.
:
Bearbeitet durch User
Frank E. schrieb: > Sorry, aber diese absolute Null-Info hättest du dir auch sparen können. Ja, sicher. War aber zu verlockend. :) Ich sags mal so: Dein Ansinnen scheint recht ungewöhnlich. Meistens heißt das, daß es einen vorteilhafteren Weg gibt. Außerdem schreibst du nichtmal, welchen GUI-Baukasten du verwendest oder rückst sonst eine Information raus. Ich kann mir allerdings auch vorstellen, daß das in Java grundsätzlich nicht geht. Ich hab keine Ahnung, was das Betriebssystem der JVM genau mitteilt. Wenn das BS auch nur Events mitteilt (was durchaus vernünftig wäre), dann hast du rein logisch schon keine Chance, über ein Event, daß vor dem Start deines Programms eingetreten ist, benachrichtigt zu werden. Dein Programm würde lediglich über das Loslassen der Taste benachrichtigt werden. Bzw., da Java den kleinsten gemeinsamen Nenner mehrerer Betriebssysteme abbilden muß, wäre es schon ausreichend wenn nur eines der unterstützten BS diesen Weg gehen würde. Wobei das mit dem Loslassen der Taste eine Idee wäre: Wenn du ein KeyReleased-Event empfängst ohne daß dem KeyPressed-Event voranging, kannst du davon ausgehen, daß die Taste vor dem Start deines Programms gedrückt wurde. Was auch gehen würde: Du schreibst einen Dämon, der auf Tastendrücke lauscht und deinem Programm die entsprechenden Informationen mitteilt. Was davon jetzt aber praktikabel und sinnvoll umzusetzen ist oder dein bisheriger Weg einfach Grütze ist und ein ganz anderer Ansatz besser wäre...schwer zu sagen ohne mehr Information.
Wühlhase schrieb: > Frank E. schrieb: >> Sorry, aber diese absolute Null-Info hättest du dir auch sparen können. > > Ja, sicher. War aber zu verlockend. :) > Wie ich schon schrieb, Xojo kann das ohne Wenn und Aber für Windows, Mac OSX und unter Linux. Frage mich, wie die das machen ... kann also nicht völlig unmöglich sein. Aber mein Hauptanliegen, Programmstart mit gedrückter Taste geht ja, der Rest ist auch mit Listener zu machen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.