PDA

View Full Version : [JAVA] ComboBoxModel e mapping oggetti


justfra
05-01-2009, 15:01
Salve ragazzi, mi sto cimentando in un piccolo applicativo che ho deciso di sviluppare seguendo gli schemi dell'architettura 3-tier e utilizzando le API per la gestione della persistenza di Java, assieme ad EclipseLink.
Non mi lamento di come vanno le cose visto che è la prima volta che entro appieno in questi settori e visto che non sono certo un esperto in materia.
Ora sono alle prese con una ComboBox nella quale devo caricare gli elementi di una tabella nel db, mappata su un'entità del mio dominio degli oggetti..
Come spesso accade avevo in mente la mia soluzione "elegante" che però ho qualche problema ad implementare..
Per andare nello specifico, mi creo un mio ListModel che estende AbstractListModel ed implementa ComboBoxModel.. quando creo la combo gli passo un'istanza di questo mio "modello" al quale passo un metodo del business layer che mi ritorna un vettore di oggetti mappati dalla tabella in questione..
E qui viene il mio problema:
la mia combo deve visualizzare nella lista dei valori che rappresentano solo una proprietà dell'oggetto, ma all'occorrenza, allo scatenarsi di un determinato evento, avrei bisogno di ricevere l'intera istanza dell'oggetto..
Non so se sono stato abbastanza chiaro ed a tal proposito farò un esempio, copiando anche del codice:

package ristogiro.clientmanager.presentation;

import java.util.Vector;

import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;

import ristogiro.clientmanager.model.Fonte;

public class FontiComboBoxModel extends AbstractListModel implements ComboBoxModel{
private Vector<Fonte> listaFonti;
private String elementoSelezionato;

public FontiComboBoxModel (Vector<Fonte> fonti) {
this.listaFonti = fonti;
setSelectedItem (getElementAt(0));
}

public String getSelectedItem() {
return elementoSelezionato;
}

public String getElementAt(int i) {
return listaFonti.get(i).getNome();
}

public int getSize() {
return listaFonti.size();
}

public void setSelectedItem(Object fonte) {
elementoSelezionato = (String) fonte;
}
}

Come potete vedere nei metodi setSelectedItem e getSelectedItem restituisco/ricevo una stringa che rappresenta solo una proprietà dell'oggetto fonte (altrimenti se passo l'intero oggetto non viene visualizzato nulla di sensato).. Quello che mi chiedo io è, quando mi serve, per farmi passare l'intero oggetto corrispondente a quello attualmente selezionato nella combobox.. devo per forza scorrermi tutta la combo ? o c'è un metodo + elegante/veloce/efficiente ?
Sono disposto anche a rivedere totalmente il modo in cui è strutturto il modello.. Sono apertissimo a consigli e critiche, sto cercando di imparare e vorrei fare le cose bene..

Grazie mille a tutti per l'attenzione..

justfra
05-01-2009, 16:19
Come non detto... Mi rispondo da solo e faccio umilmente ammenda per la mia "magna ignorantia" nel non sapere che tutto ciò si realizza semplicemente implementando il metodo toString() nell'oggetto..