www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.
Krijg je foutmeldingen? Zo ja, wat zijn die dan? Zo nee, laat even wat code zien waarmee je de combobox instantieert, de Tumor objecten instantieert en toevoegt aan de combobox.Nu probeer ik dat te doen, alleen worden mijn tumor-objecten geweigerd / niet toegevoegt.
Overigens is het voor deze zaken het handigst om een ComboboxModel te implementeren, waarmee je ook zorg draagt voor het firen van de juiste events zodra er iets wijzigt in de inhoud. Zorg daarmee dat je de listeners die (onder water) aan de het model toegevoegd worden allemaal op de hoogte gesteld worden zodra er iets wijzigt in de inhoud.
luguber, trouwens
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
http://java.sun.com/j2se/...addItem(java.lang.Object)
Dit is ongeveer wat je wil hebben lees ik zo.
Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public class Tumor { private String tumorname; private Color tumorcolor; public Tumor(String theName) { tumorname = theName; } public String toString() { return tumorname; } } |
Vervolgens ga ik via een ListIterator door een ArrayList heen:
1
2
3
4
5
6
7
8
| ListIterator t = heatmap.tumortypes.listIterator(); Tumor temp; while ( t.hasNext() ) { temp = (Tumor)t.next(); tumorlist.addItem( temp ); } |
Foutmelding:
Geweigerd in de zin van, hij wil het object van type Tumor niet toevoegenException in thread "main" java.lang.ClassCastException
at HeatmapPanel.actionPerformed(TestSwing.java:358)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
at javax.swing.JComboBox.addItem(Unknown Source)
at HeatmapPanel.buildTumor_List(TestSwing.java:169)
at HeatmapPanel.Setup_Heatmap(TestSwing.java:153)
at HeatmapFrame.<init>(TestSwing.java:56)
at TestSwing.main(TestSwing.java:16)
Ik doe iets simpels fout, maar ik kom er gewoon zelf niet uit waarom object niet kan worden toegevoegd.
Koli-man: dat stukje heb ik ook al gade geslagen, maar ik zie even niet hoe ik die in mijn Tumor-klasse versie moet verwerken.
[ Voor 10% gewijzigd door Tjeerd op 10-05-2004 15:49 ]
www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.
Nogmaals: een ComboBoxModel implementeren is beter / makkelijker onderhoudbaar voor dit soort dingen.
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Zoals ik het zie triggert de additem die Exception, dus volgens mij heeft Nestor vergeten om zijn combobox datamodel op MutableComboBoxModel in te stellen.drm schreef op 10 mei 2004 @ 15:53:
Die actionPerformed in de HeatmapPanel, waar luistert die naar? En hoe ziet die eruit?
Nogmaals: een ComboBoxModel implementeren is beter / makkelijker onderhoudbaar voor dit soort dingen.
drm: wat betreft ActionPerformed:
1
2
3
4
5
6
| public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox)e.getSource(); String tumor = (String)cb.getSelectedItem(); System.out.println( tumor ); } |
[ Voor 15% gewijzigd door Tjeerd op 10-05-2004 16:15 ]
www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.
En dat is dus niet waar. Als je objecten toevoegt aan een combobox dan blijven die bestaan. Voor het renderen gebruikt het default combobox model de toString methode van je object.Nestor schreef op 10 mei 2004 @ 16:13:
Ik had gekeken naar deze oplossing die Alarmnummer 2 jaar geleden ergens al had gegeven, maar dan kan ik nog steeds niet bij de waarden binnen de klasse komen. Logisch agz hij alleen maar strings toevoegt aan de combobox.
Als je dus een getitem of een getselecteditem doet, dan krijg je gewoon weer het object terug zoals je het erin gestopt hebt.
Vraag van de source van je event eens de classname op:
Dus e.getSource().getClass().getName();
Misschien dat die class cast exception daarvandaan komt.
Heb ik het dus verkeerd begrepen, dacht dat alleen de toString-methode werd gepakt en dat ie puur die string in de combobox zette -- daar zag ik trouwens al het nut niet van in, dus wat je zegt is wel zo logisch.bigbeng schreef op 10 mei 2004 @ 16:27:
[...]
En dat is dus niet waar. Als je objecten toevoegt aan een combobox dan blijven die bestaan. Voor het renderen gebruikt het default combobox model de toString methode van je object.
Als je dus een getitem of een getselecteditem doet, dan krijg je gewoon weer het object terug zoals je het erin gestopt hebt.
Vraag van de source van je event eens de classname op:
Dus e.getSource().getClass().getName();
Misschien dat die class cast exception daarvandaan komt.
Ga zo ff proberen, kom hier nog op terug.
www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.
Verder kijk je wat de source is van het ActionEvent, maar dit kan volgens mij helemaal niet de combobox zijn, want je moet een ItemListener aan een combobox hangen, niet een actionlistener. De getSource() van het ActionEvent object dat meegegeven wordt aan de actionPerformed is (meestal) een button waarop geklikt wordt, en waar je een ActionListener aan gehangen hebt. Ken dah?
Dus: waarschijnlijk komt die ClassCastException door de cast op regel 3 (naar een combobox).
dit is bij nader inzien niet waar
laat
[ Voor 5% gewijzigd door drm op 10-05-2004 16:37 ]
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Ik wil dus in een combobox een id en een string opslaan, waarbij ik op basis van het id een bepaalde waarde wil selecteren. Daarnaast wil ik dan weer op basis van de geselecteerde string de bijbehorende id ophalen. Ik heb het nu wel werkend, maar imho niet echt super netjes.
Het ophalen van een id voor de geselecteerde string is simpel: ik vul de jcombobox met objecten met daarin een naam en id en een toString() method die de string teruggeeft en een getId() method die de id teruggeeft.
Ik selecteer nu bij initialisatie van het formulier de gewenste waarde door een linear search toe te passen op de arraylist die ik in de combobox stop en de index van de juiste waarde als parameter mee te geven aan setSelectedIndex(). Dit werkt, maar kan dit nou niet mooier?
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Nee, setSelectedItem is volgens mij niet wat ik bedoel. Het is als volgt: ik heb dus een combobox waarin een (mogelijk) groot aantal Strings staan met aan elke string een bepaald ID gekoppeld (dit id is niet ascending en niet opeenvolgend, het kan dus zijn dat in de combobox 1 - bla, 5 - blabla en 6 - bliep) staat, waarbij dus het getal het 'id'). Bij initialisatie van het venster moet er een bepaald veld in die combobox worden geselecteerd op basis van de gegeven id. Bij afsluiting van het venster moet de huidig geselecteerde id worden opgehaald.drm schreef op 10 mei 2004 @ 20:16:
Ik snap niet helemaal wat je bedoelt, maar is setSelectedItem niet gewoon wat je bedoelt? Sowieso lijkt het mij het handigst om de List (waarin de items zitten) te wrappen in een ComboBoxModel, eventueel door gewoon een anonymous afgeleide van DefaultComboBox te maken.
1
2
3
| JComboBox cb = (JComboBox)e.getSource(); Tumor tumor = (Tumor)cb.getSelectedItem(); System.out.println( "Kleur: " + tumor.getColor() ); |
Zou bijna zweren dat ik dit ook eerder had geprobeerd, maar toen een foutmelding kreeg. Iig het is opgelost, nou geef ik verder wel toestemming om dit topic te kapen
[ Voor 6% gewijzigd door Tjeerd op 11-05-2004 10:12 ]
www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.
Nestor schreef op 10 mei 2004 @ 16:13:
Java:
1 2 3 JComboBox cb = (JComboBox)e.getSource(); String tumor = (String)cb.getSelectedItem(); System.out.println( tumor );
Zie je het verschil?Nestor schreef op 11 mei 2004 @ 10:11:
Java:
1 2 3 JComboBox cb = (JComboBox)e.getSource(); Tumor tumor = (Tumor)cb.getSelectedItem(); System.out.println( "Kleur: " + tumor.getColor() );
Precies wat drm al zei.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Ah, ok, dus het is alleen bij initialisatie van belang dat er op id gezocht kan worden? Zo ja, dan zou ik het ook gewoon met een search doen, zo nee, dan zou ik ze (in eerste instantie al, voordat je met de combobox aan de slag gaat) in een Map stoppen (dat is met id/value paren sowieso niet onhandig om te doen)Martin Sturm:
Nee, setSelectedItem is volgens mij niet wat ik bedoel. Het is als volgt: ik heb dus een combobox waarin een (mogelijk) groot aantal Strings staan met aan elke string een bepaald ID gekoppeld (dit id is niet ascending en niet opeenvolgend, het kan dus zijn dat in de combobox 1 - bla, 5 - blabla en 6 - bliep) staat, waarbij dus het getal het 'id'). Bij initialisatie van het venster moet er een bepaald veld in die combobox worden geselecteerd op basis van de gegeven id. Bij afsluiting van het venster moet de huidig geselecteerde id worden opgehaald.
[ Voor 4% gewijzigd door drm op 11-05-2004 11:03 ]
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
Hij heeft ook gelijk, nogmaals bedankt voor de snelle hulp
[ Voor 10% gewijzigd door Tjeerd op 11-05-2004 10:56 ]
www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.