[SUCHE] Hilfe zum itemChangeListener

Hallo!
Ich habe folgendes Problem:

Ich muss für mein Studium eine kleine Projektarbeit machen, und hänge gerade an ner blöden Sache fest.
Ich muss so eine Art „Rundgang“ durch die Schule programmieren, also einfach nur aus nem Menü das Gebäude auswählen, dann das Stockwerk auswählen, danach den Raum auswählen.

Da ja nicht jedes Gebäude die gleiche Anzahl an Stockwerken hat, und auf jedem Stockwerk andere Räume sind, werden meine DropDownMenüs (3 stück) dynamisch erstellt.

D.h.: Wenn ich ein Gebäude auswähl, werden im ItemListener zuerst die ganzen Menüpunkte aus der JComboBox für die Stockwerke entfernt, und dann jenachdem, welches Gebäude gewählt wurde, werden nun die entsprechenden Stockwerke als Items hineingeschrieben.

Nun geht es weiter… Wenn sich in der JComboBox für die Stockwerke was ändert, werden die kompletten Räume aus dem nächsten Menü gelöscht, und nach ner Abfrage die entsprechenden Räume hineingeschrieben, die auf dem Stockwerk verfügbar sind.

**Bis hierhin ist noch alles klar
aber jetzt kommts…

Okay, ich wähle einen Raum aus, die Methode itemStateChanged bastelt ein popup, in dem der Raum angezeigt wird.
läuft noch alles Super…

Aber wenn ich jetzt das neue Fenster schließe, und ein anderes Stockwerk auswähl, wird das Fenster wieder geöffnet.
Klar, das liegt daran, dass der itemListener merkt, dass sich was in dem Raum-Menü verändert. (Weil ja die neue Stockwerkauswahl auslöst, dass alle Items in der JComboBox für die Räume gelöscht werden)

Aber wie kann ich das umgehen?
Abfragen kann ich blöderweise nicht in die itemStateChanged Methode reinbauen… Dann mekkert der compiler (NetBeans) rum…

Was könnte ich machen, dass das Fenster nicht aufgebaut wird, wenn sich die ganzen Objekte aus dem RaumMenü verdünnisieren?

Vielen Dank im Vorraus für die Antworten.

mfg Kevin aka RaveKev**

Ach ja, wenn ich anfang, in den itemListener ne Abfrage einzubauen, gibt mir der Compiler folgendes aus:

Exception in thread „AWT-EventQueue-0“ java.lang.NullPointerException
at rundgang.RaumFrame.anzeigen(RaumFrame.java:20)
at rundgang.ProgFrame$3.itemStateChanged(ProgFrame.java:76)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1162)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1210)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1266)
at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1288)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:161)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:169)
at javax.swing.JComboBox.removeAllItems(JComboBox.java:745)
at rundgang.ProgFrame$2.itemStateChanged(ProgFrame.java:54)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1162)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1210)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1266)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:88)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:551)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:597)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:808)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:232)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:476)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Moin.

Etwas Code wäre hilfreich gewesen…

Daher gibts nur ein paar Ideen:

Du könntest in der itemStateChanged- oder in der anzeigen-Methode abprüfen, ob die Auswahl gültig ist, also z.B. ob sie != null ist. (Das hilft auf gegen NullPointerExceptions!)
Weiterhing kriegst du über das ItemEvent raus, ob ein Element aus- (selected) oder abgewählt (deselected) wurde. Dafür liefert dir die Methode getStateChange einen int Wert.
Falls das alles nicht klappt, könntest du das Eventhandling einfach „ausschalten“ indem du dir irgendwo merkst, ob die Events verarbeitet werden sollen oder nicht. Jedesmal bevor du die JComboBoxen leerst und neu befüllst schaltest du den Schalter auf Aus. Wenn du fertig bist, schaltest du ihn wieder auf Ein.

So, das waren ein paar Ideen. Hoffe die helfen.

Viel Erfolg noch,
Chris