Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: KeyListener + Jar



bischi
24-08-2003, 17:00
Ich habe ein Javaprogramm geschrieben, bei welchem der KeyListener (mehr oder weniger) einwandfrei funktioniert. Mach ich aber ein *.jar -Archiv mit diesem Programm, so läuft alles bestens, bis auf dass, das mein Programm keine Tastatureingaben mehr empfängt.

Kennt jemand dieses Problem oder weiss sonst jemand Abhilfe?

MfG Bischi

PS: Mit KeyListern hab ich öfters Probleme: Manchmal läufts und dann ändert man eine Kleinigkeit und schon geht nichts mehr!

comrad
28-08-2003, 11:55
hi

könnte daran liegen, dass du nicht richtig focussierst! achte drauf, dass du einen focus hast und dort den keylistener listen lässt.

comrad

peschmae
28-08-2003, 12:04
Du musst schon ein bisschen konkreter werden. (Sample oder so)

MfG Peschmä

bischi
28-08-2003, 17:16
Das ist so: Im www.javabuch.de hat es vier verschiedene Lösungen, wie man einen KeyListener machen kann. Egal welche ich nehme, der KeyListener funktioniert in verschiedenen von mir geschriebenen Programmen nur sporadisch. D.h., manchmal muss ich das Programm nicht mal neu kompilieren und das eine Mal funzt der Listener, das andere Mal ignoriert das Programm meine Eingaben.

Hat jemand ne Ahnung, an was es liegen könnte, der Code kann es ja nicht sein, da dieser manchmal funzt?!?!?!?


MfG Bischi


:confused: :confused: :confused: :confused: :confused:

anda_skoa
28-08-2003, 17:52
Ich hatte mal die Erfahrung, dass man den Keylistener am besten bei allen Komponenten einträgt, die gleichzeitig sichtbar sind.

Sonst hat irgendein Panel den Focus und bekommt die Key Events, aber man sieht das nicht, weil ein Panel ja keinen Focus anzeigt.

Ciao,
_

bischi
28-08-2003, 20:46
Das hat was für sich, jedoch sollte es doch eigentlich reichen, diesen dem aktuellen Fenster zu übergeben!

MfG Bischi

anda_skoa
28-08-2003, 20:49
Original geschrieben von bischi
Das hat was für sich, jedoch sollte es doch eigentlich reichen, diesen dem aktuellen Fenster zu übergeben!


Wie gesagt scheint es da ein Problem mit der Event Propagation zu haben.
Sobald das aktuelle Fenster mehr als ein Element enthält, trägt man den Listener am besten bei allen Element ein.

Wenn man so ein Element selbst gemacht hat, bei allen Subelementen.

Ich überschreibe für sowas die addKeyListener Methode, rufe dann die der Basisklasse auf und dann die der Subelemente.

Dadurch bleibt der originale addKeyListener aufruf gleich ud muss sich nicht draum kümmern, ob es Subelemente gibt, oder nicht

Ciao,
_

bischi
28-08-2003, 20:56
Wie gesagt, klingt einleuchtend, jedoch ist dies bei ca. 10 Labeln, 10 Buttons, mehreren Radiobuttons und einem Canvas doch relativ mühsam...

Danke vielmals trotzdem für den Tipp!

MfG Bischi

PS: Aber wo liegt der Fehler genau? Java1.4 sollte das doch eigentlich langsam beherrschen! Liegt dies vielleicht an meiner PC-konfiguration oder ist es wirklich ein Fehler von Sun (den man schleunigst melden müsste!), oder ...?

PS2: Da fällt mir noch was ein: Ich hab mal ein Programm geschrieben, aus einem simplen Fenster bestehend, das auf Tastatureingaben hin Midi-Sounds abspielen sollte. Zuerst hat der KeyListener nicht gefunzt, danach habe ich eine andere der vier oben genannten Varianten genommen (KeyListener ausgelagert) und es hat gefunzt. Anschliessend habe ich etwas kleines geändert, das nicht im geringsten etwas mit dem KeyListener oder Fokus oder ähnliches zu tun hatte- und schon ging nichts mehr! Kann also nicht nur ein Fokus-Problem sein!

bischi
28-08-2003, 21:09
Hier ist das Beispiel des Midi-Pc-Klaviers, das nicht funzt. Hab ich einen groben Programmierfehler gemacht, oder läuft es gar bei jemand anderem?

MfG Bischi

PS: Und bitte keine Kommentare über meinen Programmierstil oder meine Effektivität :D

peschmae
29-08-2003, 14:22
und wenn du anda_skoas Tipp beherzigst und sowas machst:




JFrame f;

...

Component[] c = f.getContentPane().getComponents();

KeyListener kl = new KeyListener() { ... }

for (int i = 0; i < c.length; i++)
c.addKeyListener(kl);


natürlich nachdem du dem Fenster deine 100 Buttons hinzugefügt hast.

Nen Versuch wärs doch wert, oder?

MfG Peschmä

bischi
29-08-2003, 15:13
Ich probier Andas Tipp bei Gelegenheit mal aus, jedoch hat das Fenster des oben downzuloadenden Programms (noch) keine einzige Komponente!

MfG Bischi

peschmae
30-08-2003, 07:55
http://www.mrunix.de/forums/showthread.php?s=&postid=144521#post144521

anda_skoas tipp geht - auch wenn er Off-Topic war ;)

also entweder



...
addKeyListener(kl)
...


oder (in manchen Fällen wohl auch noch interessant) - du ermöglichst der Contentpane, dass sie den Fokus hat:


...
cp.setFocusable(true);
cp.addKeyListener(kl)
...


geht hier beides gleichermassen.

Allerdings finde ich deine Keyboard-Tastenbelegung ein bisschen speziell ;)

MfG Peschmä

[Edit] Jetzt stimmts ;) - nicht setFocusEnabled sondern setFocusable

bischi
30-08-2003, 13:21
OK, hab ausversehen den KeyListener der ContentPane anstatt dem Fenster übergeben.

MfG Bischi

peschmae
31-08-2003, 18:33
war das nur beim Sample oder überall?

MfG Peschmä

bischi
01-09-2003, 11:10
eigentlich nur beim Sample...

Muss mal nachschauen, vielleicht hab ich das einfach irgendwie mitkopiert :D

Sollte eigentlich nicht! MfG Bischi