PDA

View Full Version : [JAVA] combobox con 2 valori


tagan
19-11-2014, 10:49
ciao a tutti.
rieccomi con un nuovo problema.
Volevo chiedervi se è possibile caricare nella JComboBox 2 valori di cui solo 1 visibile in lista. Mi spiego meglio: ho delle coppie di valori (ID e Descrizione). voglio visualizzare nella combo la Descrizione, ma utilizzare l'ID una volta selezionato il valore della combo.

in VB6 basta scrivere

Combo1.AddItem RecordSet("Descrizione")
Combo1.ItemData(Combo1.NewIndex) = RecordSet("ID")

e in lettura

.... = Combo1.List(Combo1.ListIndex) 'ho la descrizione
...= Combo1.ItemData(Combo1.ListIndex) 'ho la chiave unica


è possibile la stessa cosa in Java.
In alternativa come posso fare?

pensavo di caricare un array a 2 dimesioni, tipo:

String[][] mod = {{"1","tipo1"},{"2","tipo2"},{"2","tipo3"}};
DefaultComboBoxModel cmbModel=new DefaultComboBoxModel();
cmbModel.addElement(mod[0][1]);
cmbModel.addElement(mod[1][1]);
cmbModel.addElement(mod[2][1]); //cosi carico la stringa "tipo3" ma mi rimane fuori l'ID

// cmbModel.addElement(mod[0]); //cosi carico il reference visualizzando String@123456

cmbTest.setModel(cmbModel);


voi come avete risolto?
grazie, tagan

sottovento
19-11-2014, 13:45
Crei una classe che contenga i tuoi valori (anche unnamed).
La toString() di quella classe riporta il valore che vuoi visualizzare

tagan
19-11-2014, 14:27
Crei una classe che contenga i tuoi valori (anche unnamed).
La toString() di quella classe riporta il valore che vuoi visualizzare

non ho capito!
intendi una cosa del genere?


class MioDato{
public int ID;
public String Descrizione;

public String toString(){
return ID+"-"+Descrizione;
}
}


ma se faccio cosi, sul valore della combobox, mi include anche il campo che non voglio visualizzare.

MioDato md = new MioDato();
md.ID=1; md.Descrizione="Testo1";
cb.addItem(md);
md = new MioDato();
md.ID=2; md.Descrizione="Testo2";
cb.addItem(md);
md = new MioDato();
md.ID=3; md.Descrizione="Testo3";
cb.addItem(md);


in questo modo, nella combo ho :
1-testo1
2-testo2
3-testo3.

invece io voglio solo visualizzare il testo, ma alla selezione, mi deve restituire l'ID associato al testo.

sottovento
19-11-2014, 14:35
non ho capito!
intendi una cosa del genere?


class MioDato{
public int ID;
public String Descrizione;

public String toString(){
return ID+"-"+Descrizione;
}
}


ma se faccio cosi, sul valore della combobox, mi include anche il campo che non voglio visualizzare.

Allora non metterlo nella toString(), no? Se vuoi visualizzare solo la descrizione, fai

@Override
public String toString()
{
return descrizione;
}

(descrizione deve cominciare con una minuscola).

Alla selezione, ti fai dare l'indice con getSelectedIndex(); visto che poi hai il modello (lo puoi ottenere con

DefaultComboBoxModel model = (DefaultComboBoxModel)cmd.getModel();

), puoi ottenere l'oggetto di tipo MioDato e farci quello che vuoi.

tagan
19-11-2014, 14:54
Alla selezione, ti fai dare l'indice con getSelectedIndex(); visto che poi hai il modello (lo puoi ottenere con

DefaultComboBoxModel model = (DefaultComboBoxModel)cmd.getModel();

), puoi ottenere l'oggetto di tipo MioDato e farci quello che vuoi.

grazie.
il codice per prelevare il valore dalla combo è questo:

DefaultComboBoxModel model = (DefaultComboBoxModel)cb.getModel();
MioDato md = (MioDato)model.getSelectedItem();


perché bisogna usare "DefaultComboBoxModel", non è possibile ricavare l'oggetto "MioDato" direttamente dalla ComboBox?

sottovento
19-11-2014, 15:03
grazie.
il codice per prelevare il valore dalla combo è questo:

DefaultComboBoxModel model = (DefaultComboBoxModel)cb.getModel();
MioDato md = (MioDato)model.getSelectedItem();


perché bisogna usare "DefaultComboBoxModel", non è possibile ricavare l'oggetto "MioDato" direttamente dalla ComboBox?
Scusa, hai ragione. Sono ancora mezzo addormentato ;)
Puoi prelevare il valore direttamente con getSelectedItem()