Hallo zusammen,
ich habe da ein kleines Problem und zwar habe ich folgende Konstellation:
1. eine JComboBox wird "von aussen" befüllt, diese hat einen ActionListener registriert.
2. dieser ActionListener feuert, wenn ein Eintrag ausgewählt wird und befüllt die zweite JComboBox
3. die wiederrum auch einen ActionListener registriert hat
4. der dann feuert wenn in der zweiten JComboBox ein Eintrag ausgewählt wird.
Das ganze funktioniert auch einwandfrei, beim ersten Mal. Wenn man die erste JComboBox dann verändert, fliegt das Ganze mit einer NPE raus. Es ist so, dass die erste JComboBox die Einträge aus der zweiten rauswirft und beim ChangeEvent der ActionListener der zweiten JComboBox feurt.
Gibt es eine Möglichkeit zu sagen "jetzt deaktiviere ich kurzzeitig die Events" und sie dann wieder einschalten?
Hier der Code:
Danke Euch schon mal.
ich habe da ein kleines Problem und zwar habe ich folgende Konstellation:
1. eine JComboBox wird "von aussen" befüllt, diese hat einen ActionListener registriert.
2. dieser ActionListener feuert, wenn ein Eintrag ausgewählt wird und befüllt die zweite JComboBox
3. die wiederrum auch einen ActionListener registriert hat
4. der dann feuert wenn in der zweiten JComboBox ein Eintrag ausgewählt wird.
Das ganze funktioniert auch einwandfrei, beim ersten Mal. Wenn man die erste JComboBox dann verändert, fliegt das Ganze mit einer NPE raus. Es ist so, dass die erste JComboBox die Einträge aus der zweiten rauswirft und beim ChangeEvent der ActionListener der zweiten JComboBox feurt.
Gibt es eine Möglichkeit zu sagen "jetzt deaktiviere ich kurzzeitig die Events" und sie dann wieder einschalten?
Hier der Code:
Code:
JComboBox<Object> cbxLang = new JComboBox<Object>();
Iterator<String> iterator = languageList.iterator();
JComboBox<Object> cbxModel = new JComboBox<Object>();
while (iterator.hasNext()) {
String next = iterator.next();
cbxLang.addItem(makeObj(next));
}
cbxLang.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
_wds_dvd.setDVDLanguage(((JComboBox<Object>)e.getSource()).getSelectedItem().toString());
_logger.info("Selected language: " +((JComboBox<Object>)e.getSource()).getSelectedItem().toString());
List<String> modelList = _wds_dvd.getModelList();
Iterator<String> iterator = modelList.iterator();
cbxModel.removeAllItems();
while (iterator.hasNext()) {
String next = iterator.next();
cbxModel.addItem(makeObj(next));
}
cbxModel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
_logger.info("Selected modelline: " + ((JComboBox<Object>)e.getSource()).getSelectedItem().toString());
_wds_dvd.setModel(((JComboBox<Object>)e.getSource()).getSelectedItem().toString());
try {
String navigationXML = _wds_dvd.getNavigationXML();
_navTree.setIconLocation(_wds_dvd.getIconLocation());
_navTree.setCellRenderer(new WDSCellRenderer());
_navTree.buildNavigationTree(navigationXML);
open_wds ();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
}
});
Danke Euch schon mal.