Mehrere JComboBox in Abhängigkeit

Hi,

ich habe eine Liste von Objekten, die u.a. 3 Strings beinhalten.
(also eine Tabelle)

diese sind wirklich eindeutig zugeordnet.

Nun ist der Wunsch, daß der Nutzer in 3 ComboBoxen nach jedem String suchen kann, und wenn sich in der einen was ändert, sollen sich die anderen auch anpassen.

Folgendes soll noch beachtet werden:
der User soll in die Zeilen auch die ersten Zeichen eingeben und dann sollen nur noch die passenden Einträge zu sehen sein.
in den anderen Boxen natürlich auch nur noch diese.

Es darf aber am Ende kein Wert drinstehen, der nicht schon so in der Auswahl ist.

Vielleicht kann mir wer helfen…

Besten Dank

Winni

Moin

ich habe eine Liste von Objekten, die u.a. 3 Strings beinhalten.
(also eine Tabelle)

diese sind wirklich eindeutig zugeordnet.

Nun ist der Wunsch, daß der Nutzer in 3 ComboBoxen nach jedem String suchen
kann, und wenn sich in der einen was ändert, sollen sich die anderen auch
anpassen.

Vector v1 für den ersten String anlegen, alle reinkopieren, ComboBox anlegen. Das gleiche noch 2x für die anderen.

der User soll in die Zeilen auch die ersten Zeichen eingeben und dann sollen
nur noch die passenden Einträge zu sehen sein.
in den anderen Boxen natürlich auch nur noch diese.
Es darf aber am Ende kein Wert drinstehen, der nicht schon so in der Auswahl
ist.

hmmm… das wird nicht billig. Die normalen ComboBoxen sind nicht besonders mitteilsam was das Überwachen von Änderungen angeht. Da must du wohl einen ComboBoxEditor implementieren. Als Component würd ich ein JTextField nehmen. Jetzt gibts 2 Möglickeiten:

Entweder einen java.awt.event.KeyListener auf das JTextField setzen. Bei jedem abgeschlossenem Tastendruck kucken ob der entstehende Wert gültig ist. Wenn nicht den Tastendurck per e.consume() unterdrücken. Wenn ja: die anderen ComboBoxen updaten. Nachteil: das kann der User per Copy-Paste u.U. umgehen.

Oder eine Document-Klasse implementieren (siehe JTextField-Klassen-Doc, da ist ein Beispiel drin). Die könnte auch überprüfen und die Boxen ändern, ohne grossartig mit Listenern arbeiten zu müssen. Ausserdem kann man so absolut sicher stellen dass nie ein invalider Wert angezeigt werden kann. Allerdings ist die Document-Klasse nicht gerade einfach aufgebaut.

Das eigentliche raussuchen und updaten ist einfach:
In der gerade selektierten/aktiven Combobox alle Elemente des dazupassenden String-Vektors durchgehen. Past einer nicht mehr: rausschmeissen. Den gleichen index bei den 2 anderen Vectoren auch rausschmeissen. Die ComboBoxen gleich mit updaten (JComboBox.removeItemAt()), oder eben anstelle von Vectoren gleich mit einem MutableComboBoxModel arbeiten.

Wenn der User die Vorgabe verkleinert, also wieder mehr Strings in Frage kommen: Vektoren neu aufbauen.

Vermeide aber auf jeden Fall JComboBox.setModel(ComboBoxModel aModel). Das läst das pop-up in verschiedenen Versionen verschwinden.

cu

Moin,

also scheints etwas umfangreicher zu werden.

Da frage ich nochmal nach, ob die Anforderungen ggf. „angepaßt“ werden können.

Besten Dank für die Hinweise.

Winni

PS:
auch andere Lösungsansätze wären willkommen