Discussion:
JComboBox poppt nicht auf
(zu alt für eine Antwort)
Hilmar K. Hoherz
2003-11-01 11:31:56 UTC
Permalink
Hallo allerseits,

ich habe hier ein Problem mit der Komponente
JComboBox. Ich habe diese Komponente eingebunden
und beim Aufruf des Konstruktors ein Stringarray übergeben.
Wenn ich mir den Inhalt dieser Componente wieder herausgeben
lasse, kann ich auch feststellen, dass das Stringarray vollständig
in der ComboBox enthalten ist. Leider wird zwar die erste
Komponente des Arrays angezeigt, die ComboBox lässt
sich jedoch leider nicht aufpoppen. Enable ist true, ja sogar
editable ist true. Anfangs hat alles noch einwandfrei
funktioniert aber jetzt irgendwie nicht mehr.
Ich konnte leider nicht einkreisen, an welchen Änderungen
es liegt, dass das Aufpoppen nicht mehr möglich ist.
Ich habe eigentlich keine Komponenteneigenschaften
verändert...
Dieser Fehler ist mir absolut ein Rätsel.
Ich habe nicht den Hauch eines Ansatzes, um ihn zu beseitigen.
Die API-Dokumentation als auch das Java-Swing-tutorial
konnten mir leider nicht weiterhelfen.

Vielen Dank im Voraus für Anregungen, Tipps oder Hinweise,
mfg: Hilmar
Aljoscha Rittner
2003-11-01 12:24:44 UTC
Permalink
Post by Hilmar K. Hoherz
ich habe hier ein Problem mit der Komponente
JComboBox. Ich habe diese Komponente eingebunden
und beim Aufruf des Konstruktors ein Stringarray übergeben.
Wenn ich mir den Inhalt dieser Componente wieder herausgeben
lasse, kann ich auch feststellen, dass das Stringarray vollständig
in der ComboBox enthalten ist. Leider wird zwar die erste
Komponente des Arrays angezeigt, die ComboBox lässt
sich jedoch leider nicht aufpoppen. Enable ist true, ja sogar
editable ist true. Anfangs hat alles noch einwandfrei
funktioniert aber jetzt irgendwie nicht mehr.
Ich konnte leider nicht einkreisen, an welchen Änderungen
es liegt, dass das Aufpoppen nicht mehr möglich ist.
Ich habe eigentlich keine Komponenteneigenschaften
verändert...
Das sagen sie alle ;-)
Post by Hilmar K. Hoherz
Dieser Fehler ist mir absolut ein Rätsel.
Ich habe nicht den Hauch eines Ansatzes, um ihn zu beseitigen.
Die API-Dokumentation als auch das Java-Swing-tutorial
konnten mir leider nicht weiterhelfen.
Hast du mal die Konsole angeschaut, ob irgendwelche Exceptions
auftauchen. Frisst du irgendwo Exceptions mit:

catch (Exception e){} ?

Eine Exception im Swing-System kann nämlich zu solchen Aktionen
führen. Gerne auch in einem eigenen Renderer.

Etwas versteckter sind Probleme im Layout. ZB., wenn AWT-Komponenten
im JFrame mit rumfliegen. Dann wird nämlich die PopUp-Liste komplett
verdeckt.

Das läßt sich aber gut überprüfen. Aufpoppen lassen und mit den
Cursor-Tasten auf und ab gehen. Wenn sich der Eintrag im Edit-Fenster
der Combobox ändert aber die Liste nicht zu sehen ist, hast du
vermutlich ein Überdeckungsproblem.

Gruß,
Josch.
--
Brot trocknet nicht so rasch aus, wenn man es stets in einem Eimer
Wasser lagert.
[Haushaltstips - für den nächsten Tip eine Antwort provozieren...]
Hilmar K. Hoherz
2003-11-01 14:25:34 UTC
Permalink
Hallo.
Zunächst erstmal danke für die schnelle Antwort.
Post by Aljoscha Rittner
Hast du mal die Konsole angeschaut, ob irgendwelche Exceptions
catch (Exception e){} ?
Eine Exception im Swing-System kann nämlich zu solchen Aktionen
führen. Gerne auch in einem eigenen Renderer.
Den Block, der Exceptions abfängt, habe ich auskommentiert.
Leider wird jedoch keine andere Exception geworfen,
die mir einen Anhaltspunkt geben könnte.
Post by Aljoscha Rittner
Etwas versteckter sind Probleme im Layout. ZB., wenn AWT-Komponenten
im JFrame mit rumfliegen. Dann wird nämlich die PopUp-Liste komplett
verdeckt.
Das läßt sich aber gut überprüfen. Aufpoppen lassen und mit den
Cursor-Tasten auf und ab gehen. Wenn sich der Eintrag im Edit-Fenster
der Combobox ändert aber die Liste nicht zu sehen ist, hast du
vermutlich ein Überdeckungsproblem.
Da habe ich auch versucht. Leider ohne Ergebnis.
In einem früheren Entwicklungsstadium meines Programmes
hatte ich den selben Fehler. Die ComboBox ist beim Anklicken
nicht aufgepoppt. Durch das Herumexperimentieren mit diesem
Problem ist mir aufgefallen, dass ich das Problem dadurch beseitigen
konnte, dass ich einen weiteren String mit der additem-methode
der ComboBox hinzugefügt habe. Nun hatte ich zwar ein unerwünschtes
Itdem in meiner ComboBox, doch immerhin poppte sie auf.
Leider funktioniert auch das nicht mehr.
Warum, weiss der Teufel (und vielleicht das Sun Entwicklungsteam).
Könnte das vielleicht damit zusammenhängen, dass ich awt und
swing Komponenten zusammen benutze ? Ich habe bisher nur
awt benutzt. Ich habe die JComboBox auf ein Panel platziert (awt)
in dem Frame (awt) benutze ich aber auch parallel JPanels (swing) etc.

Sollte man strikt awt oder strkt swing programmieren,
oder gibt es vielleicht doch noch eine andere Lösung für
mein Problem, ohne dass ich mein komplettes UI neu schreiben
muss...

Für Tipps und Hinweise wie immer vielen Dank im Voraus.
mfg: Hilmar
Post by Aljoscha Rittner
Brot trocknet nicht so rasch aus, wenn man es stets in einem Eimer
Wasser lagert.
[Haushaltstips - für den nächsten Tip eine Antwort provozieren...]
Aljoscha Rittner
2003-11-01 16:19:39 UTC
Permalink
Post by Hilmar K. Hoherz
Post by Aljoscha Rittner
Hast du mal die Konsole angeschaut, ob irgendwelche Exceptions
catch (Exception e){} ?
Eine Exception im Swing-System kann nämlich zu solchen Aktionen
führen. Gerne auch in einem eigenen Renderer.
Den Block, der Exceptions abfängt, habe ich auskommentiert.
Leider wird jedoch keine andere Exception geworfen,
die mir einen Anhaltspunkt geben könnte.
Post by Aljoscha Rittner
Etwas versteckter sind Probleme im Layout. ZB., wenn AWT-Komponenten
im JFrame mit rumfliegen. Dann wird nämlich die PopUp-Liste komplett
verdeckt.
Das läßt sich aber gut überprüfen. Aufpoppen lassen und mit den
Cursor-Tasten auf und ab gehen. Wenn sich der Eintrag im Edit-Fenster
der Combobox ändert aber die Liste nicht zu sehen ist, hast du
vermutlich ein Überdeckungsproblem.
Da habe ich auch versucht. Leider ohne Ergebnis.
In einem früheren Entwicklungsstadium meines Programmes
hatte ich den selben Fehler. Die ComboBox ist beim Anklicken
nicht aufgepoppt. Durch das Herumexperimentieren mit diesem
Problem ist mir aufgefallen, dass ich das Problem dadurch beseitigen
konnte, dass ich einen weiteren String mit der additem-methode
der ComboBox hinzugefügt habe.
Das hört sich so krude an, dass ich fast nur auf einen Programmfehler
bei dir Tippen kann.
Post by Hilmar K. Hoherz
Nun hatte ich zwar ein unerwünschtes
Itdem in meiner ComboBox, doch immerhin poppte sie auf.
Leider funktioniert auch das nicht mehr.
Solche Workarounds sollte man verstehen, nicht nur einsetzen.
Post by Hilmar K. Hoherz
Warum, weiss der Teufel (und vielleicht das Sun Entwicklungsteam).
Könnte das vielleicht damit zusammenhängen, dass ich awt und
swing Komponenten zusammen benutze ? Ich habe bisher nur
awt benutzt. Ich habe die JComboBox auf ein Panel platziert (awt)
in dem Frame (awt) benutze ich aber auch parallel JPanels (swing) etc.
Das ist doch genau das, was ich oben beschrieben habe. Du hast
bestimmt irgendwo ein Überdeckungsproblem. Mir ist inzwischen auch
klar, warum vermutlich der zusätzliche Eintrag dir geholfen hatte.
Damit wurde die Liste so lang, dass sie über den Fensterrand
hinausragte. Swing verwendet dann automatisch Heavyweigt-Popup -
dieses Popup liegt dann immer Oben auf.

Setzte mal folgende Zeile in dein Programm:

problemComboBox.setLightWeightPopupEnabled (false);

Damit schaltest den HeavyWeight-Modus für die PopupListe zwingend ein.
Wenn jetzt die Liste erscheint, hast du ein typisches AWT/Swing-Mix
Problem.

Lies bitte gleich zu der Methode die API-Dokumentation *und* den Link
dazu: http://java.sun.com/products/jfc/tsc/articles/mixing/index.html

Man kann nicht einfach Stück für Stück von AWT auf Swing umstellen. Du
mußt alle Container und Komponenten in Swing-Äquivalente umsetzen.

Gruß,
Josch.
--
Milch bleibt wesentlich länger frisch, wenn man sie in der Kuh beläßt.
[Haushaltstips - für den nächsten Tip eine Antwort provozieren...]
Hilmar K. Hoherz
2003-11-01 18:34:45 UTC
Permalink
Hallo.
Post by Aljoscha Rittner
Das ist doch genau das, was ich oben beschrieben habe. Du hast
bestimmt irgendwo ein Überdeckungsproblem. Mir ist inzwischen auch
klar, warum vermutlich der zusätzliche Eintrag dir geholfen hatte.
Damit wurde die Liste so lang, dass sie über den Fensterrand
hinausragte. Swing verwendet dann automatisch Heavyweigt-Popup -
dieses Popup liegt dann immer Oben auf.
problemComboBox.setLightWeightPopupEnabled (false);
Damit schaltest den HeavyWeight-Modus für die PopupListe zwingend ein.
Wenn jetzt die Liste erscheint, hast du ein typisches AWT/Swing-Mix
Problem.
Du hattest Recht. Es schien sich wohl tatsächlich um ein Überdeckungs-
problem zuhandeln. Die Modifikation mit dem LightWeightPopup hat
allerdings mein Problem nur zur Hälfte gelöst.
Zwar ist die Liste aufgepoppt, jedoch waren keine Einträge darin zu sehen.
Ich habe jetzt einfach alles nach Swing modifiziert und es funktioniert
einwandfrei. Ich wusste nicht, dass es bei vermischter Verwendung
von Swing und awt Komponenten zu Problemen kommen kann.
Wir haben an der Uni nur awt gelernt (als Exempel für Frameworks),
mein Prof. mag kein swing, warum auch immer...


Vielen Dank für den Tip !!!
Alleine hätte ich warscheinlich noch Stunden daran herumgemurkst...

mfg: Hilmar
Post by Aljoscha Rittner
Milch bleibt wesentlich länger frisch, wenn man sie in der Kuh beläßt.
[Haushaltstips - für den nächsten Tip eine Antwort provozieren...]
Loading...