Möchte eine 2. JComboBox abhängig von der Auswahl der ersten JComboBox befüllen.
Hab in einem Listener:
Java:
cBox.addItemListener(newItemListener()// cBox ist die 2. ComboBox die befüllt werden soll{publicvoiditemStateChanged(ItemEvent e){String kunde =(String)cBox.getSelectedItem();System.out.println(kunde);
lFrf.setText(kunde);}}
Da passiert leider nix! Dieser Listener ist in einem anderen geschachtelt.
Es kommt folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Vector cannot be cast to java.lang.String
Find ich merkwürdig, dass man einen Vector nicht als string casten kann. Hab den Beispielcode aus dem Netz zusammengebastelt.
String kunde =(String)cBox.getSelectedItem();[/Java]
richtig.Das gilt aber nur, wenn du wirklich einfache Objekte in der JComboBox hast, die sich zu String casten lassen.EinVector kann nicht zu einem String gecastet werden, weil er eine Liste von Objekten ist.Ich nehme daher an, dass du einen Fehler beim Verknüpfen des Models mit deiner JComboBox hast.Was wird denn ausgegeben, wenn du schreibst:[code=Java]System.out.println(cBox.getSelectedItem());
Füge das mal ein: [java=5]final Object o = cBox.getSelectedItem();
System.out.printf("Item is: %s%n", o == null ? null : o.getClass());[/code]
... und poste mal die Ausgabe.
Okay, Du hast also Vector-Objekte in der Liste. Die kann man natürlich nicht nach String casten. Was ein Vector ist, weißt Du? Willst Du vielleicht an die Elemente des Vektors? Dann musst das Item erst nach Vector (oder eines der Interfaces die Vector implementiert) casten und dann die Elemente abgreifen. An welcher Stelle hängt's denn da?
Die Frage ist ja auch, ob es hier sinnvoll ist, einen Vector in einen Vector zu stecken. Lieber passende Objekte erzeugen, die mit den Daten befüllen und dann in den Vector oder ein passendes Model für die JComboBox stecken.
Ähhh... Na ja, wie auch immer... Ich muss es zwar nicht verstehen, aber wenn ich jetzt meine SQL Query so formuliere
("select * from fahrzeuge where fzfirma = ' " + (cBox.getSelectedItem()) + " ' ");
wird der richtige Eintrag ausgegeben.
Offensichtlich (sry jungs!) musste ich das gar nicht rumcastdingsen-wie -auch-immer.
Mit einem Vector in einem Vector bin ich auch nicht wirklich glücklich - hab auch gelesen, dass der depreciated ist und auch zu langsam.
Was ist in so einem Fall sinnvoll? An einem Array nervt mich, dass man beim erzeugen die Grösse angeben muss. Da sowas ja aus der DB befüllt wird ist die Grösse unterschiedlich.
Muss man bei einem Array vorher die Grösse des ResultSets holen und dann erst initialisieren?
Naja - was LeX eigentlich meint, ist, dass man doch nicht irgendwelche inhaltlich unbekannte Dinge in eine ComboBox kloppt und dann irgendwas damit machen will, ohne zu wissen, was das eigentlich alles ist. Wenn Du nicht weißt, was der Inhalt Deiner Vektoren in Vektoren ist und welchen Teil Du für Dein SELECT-Statement benötigst, wie soll Dir dann hier irgendwer helfen.
Wieso definierst Du Dir nicht eine gute Datenstruktur der Daten die da ausgewählt werden sollen. Dann versuchst Du auch nicht mehr Äpfel zu Birnen zu casten.