PDA

Visualizza la versione completa : [JAVA] Problema con JComboBox


luketto
04-07-2005, 13:17
Salve ragazzi ho un problema di questo tipo:

Ho una JComboBox che carico dinamicamente estraendo dei valori dal db.
In base al valore selezionato nella JComboBox carico in alvune label dei valori corrispondenti al valore selezionato

Esempio
Nel Db ho tabella utenti
ID NOME COGNOME
1 Pippo CCC
2 Marco BBB
3 Luca AAA

Quindi nella JComboBox ho:
CCC
BBB
AAA

quando seleziono ad esempio BBB
carico in una label il nome, in questo caso Marco

L'esempio una cosa semplice di quello che effettivamente devo fare ma il problema lo stesso

Quando carico la JComboBox io inserisco la stringa
Quando prendo il valore selezionato dalla JComboBox io ho la stringa e non l'id dell'elemento selezionato per fare la ricerca nel db per chiave primaria

la domanda la seguente
posso inserire nella JComboBox degli oggetti (ad esempio l'oggetto utente con i tre campi id, nome, cognome) e far stampare solo una stringa?
In questo modo quando estraggo l'elemento selezionato ho tutti i valori che mi servono serza dover effettuare nuovamente una query sql per estrapolare le info che mi servono!

Grazie
Luketto

Andrea1979
04-07-2005, 14:05
Bh, il costruttore di JComboBox prende anche un array di Object... non vorrei dire una stupidagine, ma credo che ti basti implementare il metodo toString per gli oggetti con cui popoli la JComboBox per avere quella descrizione come etichetta.
Avevo capito bene la domanda?

luketto
04-07-2005, 14:40
Mi spieghi meglio scusami?

Andrea1979
04-07-2005, 14:45
ti posto un esempio alquanto banale, composto di un paio di classi...



import javax.swing.*;

class persona {

private String nome, cognome;
private int eta;

public String getNome() {
return nome;
}

public String getCognome() {
return cognome;
}

public int getEta() {
return eta;
}

public String toString() {
return getNome()+" "+getCognome();
}

public persona(String nome, String cognome, int eta) {
this.nome = nome;
this.cognome = cognome;
this.eta = eta;
}
}


public class demoJComboBox extends JFrame {
public demoJComboBox() {
super("Combo personalizzata");
persona[] p = new persona[3];
String[] nome = {"Andrea", "Marco", "Gina"};
String[] cognome = {"Verdi", "Bianco", "Rossi"};
int[] eta = {20, 30, 20};

for (int i=0; i < p.length; i++) {
p[i] = new persona(nome[i], cognome[i], eta[i]);
}

JComboBox myCombo = new JComboBox(p);
this.getContentPane().add(myCombo);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setSize(400, 300);
this.setVisible(true);
}

public static void main (String[] args) {
demoJComboBox d = new demoJComboBox();

}
}

Spero di aver centrato la questione.

luketto
04-07-2005, 14:52
a me un po diverso perch la combo si incrementa e decrementa dinamicamente! non conosco dimensione (nel tuo caso 3) a priori!!! consigli?

Andrea1979
04-07-2005, 15:08
bh, non quello il problema: devi implementare una classe che rispecchi il risultato della query: se stai tirando fuori persone, crei una classe persona tipo quella mia (modificata secondo la tue esigenze). Le JComboBox possono essere popolate anche via


addItem(Object o)

luketto
04-07-2005, 16:02
ho eseguito il tuo esempio, ma dove dici al programma di stampare nome e cognome e non eta? cio nella combo dove imposto i campi che deono comparire?

Grazie cmq

Andrea1979
04-07-2005, 16:12
La JComboBox va automaticamente a vedere se c' una rappresentazione Stringa del oggetto persona... che fornito esplicitamente dal toString della classe persona. Per quello parlavo di toString nella prima risposta.
:ciauz:

luketto
04-07-2005, 16:38
se volessi stampare solo il nome? e non il cognome?

Andrea1979
04-07-2005, 16:39
in persona



public String toString() {
return getNome();
}


in altre parole ti basta modificare il toString e fargli tornare la stringa che vuoi.

Loading