also ich habe das Problem, das ich mehrere JComboBoxen habe, die ihre Daten aus einer Tabelle bekommen.
Nun möchte ich das wenn man bei einer ComboBox etwas auswählt auch die anderen angepasst werden.
BSp:
1.ComboBox Inhalt: Gebäude, Fahrzeuge, Alles
2.ComboBox Inhalt: Auto,Haus,Turm,LKW,Alles
wähle ich bei ComboBox 1 Gebäude soll nur noch Haus und Turm in 2 zu sehen sein. Andersrum soll die auswahl von Turm dafür sorgen das automatisch Gebäude in der 1. ComboBox ausgewählt ist.
Was ich bereits versucht habe ist die Comboboxen zu leeren und dann das neue Array zu erstellen, was aber daran scheitert, dass ich das aktuell selektierte per getSelectedItem() brauche um das neue Array zu erstellen, ich aber eine Nullpointer Exception bekomme sobald ich die alte Belegung per removeAll() lösche.
Ja genau das hab ich, wenn eine Änderung geschiet wird die aktuelle auswahl an eine MEthode übergeben, welche sich um die Erstellung der neuen Inhalte kümmern soll.
Poste mal die relevanten Codeteile … so artet das nur in wilde Raterei aus (zumal ich nicht wirklich verstanden habe, wie Du es versuchst umzusetzen) !
Combobox1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent arg0) {
String auswahl=Combobox1.getSelectedItem().toString();
if(!auswahl.equals("Wähle:"))
{
// ############################################
// was macht diese Funktion und was ist "Stammdaten"
// ############################################
String[] angepasst = passeTabellean(Stammdaten, auswahl);
aendereCombobox2(angepasst);
}
}
});
public void aendereCombobox(String[] data)
{
// ##############################
// wird irgendwie NICHT gefüllt, oder ?
// ##############################
Set<String> cbBelegung = new TreeSet<String>();
for (int i = Combobox2.getItemCount()-1; i >=0; i--)
{
boolean Itembehalten=false;
// ##############################
// "cbBelegung" sollte also leer sein !!
// ##############################
for (String string : cbBelegung)
{
if(string.equals(Combobox2.getItemAt(i)))
Itembehalten=true;
}
if(Itembehalten==false)
{
Combobox2.remove(i);
}
}
```[/QUOTE]
Gruß
Klaus
Da hab ich zuviel gekürzt^^
cbBelegung wird natürlich per for schleife mit den Daten aus demangepassten array befüllt;
Die Methode passeTabellean() passt die kompletten Stammdaten an, sodass man ein String[] array erhält,dass sich nur noch die zur auswahl passenden Daten enthält.
aha … und wir dürfen jetzt raten, was wie im Endeffekt wirklich passiert ???
Dann noch was:
for (int i = Combobox2.getItemCount()-1; i >=0; i--)
{
boolean Itembehalten=false;
for (String string : cbBelegung)
{
if(string.equals(Combobox2.getItemAt(i)))
{
Itembehalten=true;
}
}
// #########################################################
// Du läufst hier zuvor durch die for-Schleife und setzt
// bei jeden Durchlauf ggf. den Wert "Itembehalten" ...
// Aber hier, NACH der Schleife hast Du dann natürlich
// immer nur den LETZTEN Wert der Variable an den Hacken !!
// Versuch' mal, diesen Teil IN die for-Schleife zu setzen !!
// #########################################################
if(Itembehalten==false)
{
Combobox2.remove(i);
}
}
Die Box1 musst du gar nicht löschen, die hält ja alle “Kategorien”, die ja nur ausgewählt werden.
Box2 braucht “Alles” gar nicht. Wenn sich die Boxen gegenseitig beeinflussen sollen, brauchst neben ActionEvent auch PropertyChange. Änderungen der Listen selbst machst du besser über ComboBoxModel statt direkt ComboBox, natürlich die Auswahl abgreifen bevor der Auswahlliste gelöscht wird. Außerdem erstellst du keine Arrays anhand der ComboBoxen, sondern du hälst mehrere vor, welche die Inhalte der ComboBoxen ausmachen (Array1=Auto, Lkw; Array2=Haus,Turm etc) und je nach Auswahl (Box1) haust halt das entsprechende Array in Box2, und je nach Auswahl in Box2 tust du in Box1 ja auch nur auswählen.