[java] Combobox display

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
Hey,

Ik ben voor school een applicatie met java aan het maken waarin je informatie van een huis kan invoeren/inzien.

Nou heb ik 2 mooie comboboxes, alleen de tekst die hierin weergeven wordt is niet zoals ik het zou willen.
Voorbeeld van 1 cb code.

voor combobox
Java:
1
2
3
4
5
HuidigeEigenaar[] eigenaar = HuidigeEigenaar.getAllEigenaren();

        for (int i = 0; i < eigenaar.length; i++) {
            cbEigenaar.addItem(eigenaar[i]);
        }

In het object eigenaar zit een id, datum, naam ,telnr.

Code voor selecteren van een regel:
Java:
1
2
HuidigeEigenaar eigenaar = (HuidigeEigenaar)cbEigenaar.getSelectedItem();
        newHuis.setEigenaarid(eigenaar.getEigenaarId());

Nou toont hij de tekst in de combobox ongeveer als hieronder:
Model.HuidigeEigenaar@934jkjdalskda

Maar ik wil dat hij alleen de naam van de eigenaar weergeeft.

al doe ik eigenaar[i].getNaam();, dan kan geen data meer toevoegen omdat ik dat aan de hand van het id toevoeg/wijzig.

Is het mogelijk het hele object eigenaar mee te geven, maar alleen de naam weergeven in de combobox?

[ Voor 1% gewijzigd door Creepy op 31-01-2011 21:22 . Reden: Code tags toegevoegd ]


Acties:
  • 0 Henk 'm!

  • barfieldmv
  • Registratie: Maart 2004
  • Laatst online: 10-10 12:36
In .Net geef je aan de combobox mee wat de DataFields en TextFields zijn. In dit geval is TextField dan "naam" en DataField "id". De databron is dan de array.

Waarom trouwens huidigeEigenaar als class naam? Waarom niet Eigenaar. Een eigenaar lijkt me altijd huidig. Tenzij hij niet huidig is maar dan is de class naam ook helemaal onduidelijk _/-\o_

Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 03:25

Gerco

Professional Newbie

Je moet in de HuidigeEigenaar class een toString() method implementeren. Deze roept de combobox aan wanneer hij het item gaat tonen aan de user:
Java:
1
2
3
4
@Override
public String toString() {
  return getNaam();
}

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:12

Creepy

Tactical Espionage Splatterer

Als je de toString() method override in je HuidigeEigenaar zodat die de naam teruggeeft dan zou dat gewoon moeten werken. Dat staat overigens o.a. uitgelegd op http://download.oracle.co.../components/combobox.html. En verder met barfieldmv, de naamgeving van je class lijkt wat krom.

offtopic:
Snelle Gerco ;)

[ Voor 5% gewijzigd door Creepy op 31-01-2011 21:35 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • DonnyR
  • Registratie: November 2009
  • Laatst online: 28-04 09:56
Ja top bedankt allen!
Weer wat geleerd :)
Werkt nu.
En naam is wat krom ja, misschien dat ik dat nog aanpas.

Acties:
  • 0 Henk 'm!

Verwijderd

Of als je de toString niet wil aanpassen zet je er toch gewoon je eigen renderer op

Acties:
  • 0 Henk 'm!

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 22:34
Precies, dit kan je beter oplossen met een custom renderer voor de JComboBox.
De toString() methode is hier eigenlijk niet echt voor bedoeld.
Aan de andere kant is het wel de eenvoudigste weg en waarom zou je moeilijk doen :)
Maar het is wel handig om te weten dat er dus een (krachtiger) alternatief bestaat om een willekeurige objecten te renderen in een JComboBox.

Acties:
  • 0 Henk 'm!

  • Rikkos
  • Registratie: November 2010
  • Laatst online: 06-03 06:59
Ik vind het redelijk krom om objecten in, laten we even zeggen, textfields te zetten. Een andere oplossing, een iets wat simpeler is als volgt,

je HuidigeEigenaar[] eigenaar array komt altijd overeen met een bepaalde lengte, hij zal dus waarschijnlijk niet runtime veranderen, zowel moet je dit her-initialiseren en dat doe je goed door getAllEigenaren() te doen.

nu als dit waar is kan je het volgende doen

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
HuidigeEigenaar[] eigenaar = HuidigeEigenaar.getAllEigenaren(); 

for(int i = 0; i < eigenaar.length; i++)
{
     cbEigenaar.addItem(eigenaar[i].getName()); 
}

// dit geeft de waarde terug die overeen komt met de waarde van de array eigenaar
int selectedEigenaar = cbEigenaar.getSelectedIndex();

// setEigenaarId door aan de hand van de hierboven geselecteerde 
// waarde uit de array te halen
newHuis.setEigenaarId(eigenaar[selectedEigenaar].getEigenaarId());


dit is wat jij niet wilt, maar het is toch de eenvoudigste manier, je kan uiteraard altijd data toevoegen in die array, het enigste wat je moet doen dat is herinitialiseren van de ComboBox, een custom renderer om alleen een naam te kunnen weergeven is misschien te uitgebreid voor een school applicatie

[ Voor 14% gewijzigd door Rikkos op 01-02-2011 16:30 ]


Acties:
  • 0 Henk 'm!

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 25-09 11:11

Killemov

Ik zoek nog een mooi icooi =)

Zo ... en nu nog in een modern for-jasje.
Java:
1
2
3
4
5
6
HuidigeEigenaar[] eigenaren = HuidigeEigenaar.getAllEigenaren(); 

for( HuidigeEigenaar eigenaar : eigenaren )
{
     cbEigenaar.addItem( eigenaar.getName() ); 
}

Hey ... maar dan heb je ook wat!


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 21:44

momania

iPhone 30! Bam!

Rikkos schreef op dinsdag 01 februari 2011 @ 16:25:
Ik vind het redelijk krom om objecten in, laten we even zeggen, textfields te zetten. Een andere oplossing, een iets wat simpeler is als volgt,

je HuidigeEigenaar[] eigenaar array komt altijd overeen met een bepaalde lengte, hij zal dus waarschijnlijk niet runtime veranderen, zowel moet je dit her-initialiseren en dat doe je goed door getAllEigenaren() te doen.

nu als dit waar is kan je het volgende doen

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
HuidigeEigenaar[] eigenaar = HuidigeEigenaar.getAllEigenaren(); 

for(int i = 0; i < eigenaar.length; i++)
{
     cbEigenaar.addItem(eigenaar[i].getName()); 
}

// dit geeft de waarde terug die overeen komt met de waarde van de array eigenaar
int selectedEigenaar = cbEigenaar.getSelectedIndex();

// setEigenaarId door aan de hand van de hierboven geselecteerde 
// waarde uit de array te halen
newHuis.setEigenaarId(eigenaar[selectedEigenaar].getEigenaarId());


dit is wat jij niet wilt, maar het is toch de eenvoudigste manier, je kan uiteraard altijd data toevoegen in die array, het enigste wat je moet doen dat is herinitialiseren van de ComboBox, een custom renderer om alleen een naam te kunnen weergeven is misschien te uitgebreid voor een school applicatie
Dit slaat werkelijk nergens op. Data op halen uit collectie a op basis van gekozen index uit collectie b is vragen om problemen. In een combobox (of table bv) kan je prima objecten opslaan. Daarvoor hebben deze components een achterliggend model (comboboxmodel) en kan je custom renderers eraan hangen. Wat de user dan kiest is wat jij wilt hebben, period.

Neem je whisky mee, is het te weinig... *zucht*

Pagina: 1