[Java] JCombobox fout met dubbele waardes *

Pagina: 1
Acties:

  • RTBravo
  • Registratie: April 2000
  • Laatst online: 08:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Ik heb in mijn Java Swing programma een JComboBox die gevuld wordt vanuit een database met bedrijfsnamen. Als iemand erop klikt wil ik uitlezen op welk nummer uit de lijst is geklikt (met getSelectedIndex() dus). Dit gaat allemaal goed, totdat je 2 dezelfde bedrijfnamen hebt! Dan geeft hij altijd de waarde terug van de eerste die hij tegenkomt! Als je op nr 0 bedrijf Henk hebt staan, op nr 1 bedrijf PIET en op nr 2 weer bedrijf Henk en je kiest Henk nr2, dan returned hij 0 :(

Heeft iemand hier een oplossing voor? Met de Choice uit AWT werkt het wel, maar ik moest een edit-able choice hebben, dus heb ik JComboBox moeten nemen :(

Alvast bedankt!

  • Beyond
  • Registratie: Juni 2001
  • Laatst online: 07:16

Beyond

Dussssss.......

kun je niet met een unieke waarde werken ? Een soort ID.

Al het goeie.......


  • RTBravo
  • Registratie: April 2000
  • Laatst online: 08:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
Hoe dan? Ik werk al met ID's uiteraard, maar die wil ik natuurlijk niet in de ComboBox laten zien, alleen de namen.

[ Voor 5% gewijzigd door RTBravo op 29-10-2003 18:37 ]


  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05-2025
misschien zet ie alle 'henk' id's in een array?

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

RTBravo schreef op 29 October 2003 @ 18:36:
Hoe dan? Ik werk al met ID's uiteraard, maar die wil ik natuurlijk niet in de ComboBox laten zien, alleen de namen.
Zelf een object aanmaken met naam + ID, de combobox daarmee vullen, via getSelectedItem() het ID opvragen? (object heeft een toString() methode nodig zodat de combobox weet wat hij weer moet geven IIRC).

Wie trösten wir uns, die Mörder aller Mörder?


  • RTBravo
  • Registratie: April 2000
  • Laatst online: 08:28

RTBravo

Verkopen jullie ook jojn?

Topicstarter
pfoeh,dat moet wel werken, maar is wel fokking omslachtig om allemaal objecten te gaan maken met ID's. Is het een bekend probleem wat ik heb of niet?

---UPDATE----

Ok eigenlijk best mooie oplossing, heb ze als object met toString methode ingevoegd en werkt best leuk :) Je moet alleen ff opletten dat als je de inhoud uit het JComboBox textvakje wilt hebben je nu JComboBox.getEditor().getItem().toString() doet, anders krijg je typecast exception.

[ Voor 53% gewijzigd door RTBravo op 29-10-2003 21:08 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Confusion schreef op 29 oktober 2003 @ 18:47:
[...]

Zelf een object aanmaken met naam + ID, de combobox daarmee vullen, via getSelectedItem() het ID opvragen? (object heeft een toString() methode nodig zodat de combobox weet wat hij weer moet geven IIRC).
Objecten meegeven aan de combobox is idd de beste oplossing. Alleen zou ik niet de toString van dat object gebruiken om tekst op te halen. toString is voor mezelf en mag ik net zo maken zoals het mij uitkomt. Ik zou ipv de toString functie de renderer van de JCombobox aanpassen en daar mijn eigen string erin plaatsen.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Alarmnummer schreef op 30 oktober 2003 @ 17:37:
Objecten meegeven aan de combobox is idd de beste oplossing. Alleen zou ik niet de toString van dat object gebruiken om tekst op te halen. toString is voor mezelf en mag ik net zo maken zoals het mij uitkomt. Ik zou ipv de toString functie de renderer van de JCombobox aanpassen en daar mijn eigen string erin plaatsen.
Alleen is dan je renderer object-afhankelijk; dat is voor het onderhoud misschien ook niet zo fijn... als je ooit nog iets aan je datastructuur wilt veranderen moet je je CustomComboBoxRenderer aanpassen. Of het object een getRendererString() methode geven en de Renderer die laten opvragen, maar dat is misschien weer een beetje te specifiek voor het object, want dan draagt de data afbeeldingsinformatie.

Wie trösten wir uns, die Mörder aller Mörder?


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Confusion schreef op 30 oktober 2003 @ 19:07:
Alleen is dan je renderer object-afhankelijk; dat is voor het onderhoud misschien ook niet zo fijn... als je ooit nog iets aan je datastructuur wilt veranderen moet je je CustomComboBoxRenderer aanpassen. Of het object een getRendererString() methode geven en de Renderer die laten opvragen, maar dat is misschien weer een beetje te specifiek voor het object, want dan draagt de data afbeeldingsinformatie.
Gewoon een RenderVisitor maken die alle Renderable Objects kan visiten, lijkt me dan een redelijk generieke oplossing
Zie http://exciton.cs.oberlin...tterns/VisitorPattern.htm voor uitleg over het Visitor pattern

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Confusion schreef op 30 oktober 2003 @ 19:07:
[...]

Alleen is dan je renderer object-afhankelijk; dat is voor het onderhoud misschien ook niet zo fijn..
Hij wil 1 soort object erin (Bedrijf), ik zie het probleem dus echt niet.

[ Voor 3% gewijzigd door Alarmnummer op 31-10-2003 17:50 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-07 21:46

Confusion

Fallen from grace

Alarmnummer schreef op 31 oktober 2003 @ 17:48:
Hij wil 1 soort object erin (Bedrijf), ik zie het probleem dus echt niet.
Stel je object bevat bedrijfsnaam als String en bedrijfs_ID als int en verder nog veel meer meuk. Dan kan je de Renderer wel value.bedrijfsnaam laten opvragen (zoals de standaard BasicComboBoxRenderer value.asString() aanroept), maar als je dan later besluit dat bedrijfsnaam bijvoorbeeld bedrijfsKorteNaam moet gaan heten, omdat je een kolom bedrijfsnaam in je object opneemt met een langere volledige naam en ter consistentie met de rest van je programma, dan moet je je Renderer aan gaan passen. Zoiets bedoel ik: ik weet niet hoe men dat soort problemen professioneel oplost (ik heb nog niet goed naar dat Visitor pattern gekeken).

Wie trösten wir uns, die Mörder aller Mörder?


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zowieso zie ik geen reden om members public te gaan aanspreken voor een comboboxmodel. Ik zie eigenlijk sowieso bar weinig reden tot public variabelen ;)
De reden dat ik hier de toString() niet voor zou willen gebruiken, is omdat de toString() een weergave moet geven van m'n object zoals ik het nuttig zou vinden en niet hoe het mooi zou zijn in een combobox.
Waarom dan geen vervangende methode maken voor toString? Dat kan zo:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public interface ComboBoxRenderable {
   
   public String getComboBoxString( );
}

public class Example implements ComboBoxRenderable {
   
   private int _id;
   private String _companyName;
   
   /**
    * Insert constructors and beautifull get/set methods here
    */
    
   public String getComboBoxString( ) {
      
      return getCompanyName();
  }
}


Ik persoonlijk zou de getComboBoxString() uit het object trekken, omdat ik hem het object vind 'vervuilen' en zou het bovengenoemde visitor pattern er op los laten. Het visitor pattern verplaatst de getComboBoxString() methodes van alle ComboBoxRenderable naar één class en gaat dan kijken welke class hem aanriep. Zo kan hij bepalen welke getComboBoxString() hij moet gebruiken :)
Pagina: 1