pgdx Skrevet 26. november 2008 Del Skrevet 26. november 2008 Hvor mange har følt behovet for en generisk JComboBox her? Og hvor mange har implementert en? Jeg tror jeg er oppe i tre implementasjoner nå på jobben, og føler det er en smule suboptimalt. Er det noen som har funnet the one implementation? Lenke til kommentar
HV Skrevet 26. november 2008 Del Skrevet 26. november 2008 Hvor mange har følt behovet for en generisk JComboBox her? Og hvor mange har implementert en? Jeg tror jeg er oppe i tre implementasjoner nå på jobben, og føler det er en smule suboptimalt. Er det noen som har funnet the one implementation? Hvorfor går du ikke for en generisk model til comboboxen istedet? Trenger du å endre funksjonalitet? Vennlig hilsen HV Lenke til kommentar
pgdx Skrevet 26. november 2008 Forfatter Del Skrevet 26. november 2008 Trenger ikke å endre funksjonaliteten, nei. Vil helst ha alle de samme egenskapene, med unntak av at setSelectedItem bør ta inn en generisk type og getSelectedItem og getItemAt bør returnere generiske typer. Tenker du på å lage en egen ComboBoxModel? API-en til JComboBox vil jo uansett ha synlige metoder som tar inn og returnerer Object. Det optimale hadde egentlig vært om den hadde implementert List, spør du meg. Lenke til kommentar
HV Skrevet 26. november 2008 Del Skrevet 26. november 2008 Trenger ikke å endre funksjonaliteten, nei. Vil helst ha alle de samme egenskapene, med unntak av at setSelectedItem bør ta inn en generisk type og getSelectedItem og getItemAt bør returnere generiske typer. Der beskrev du en model. Comboboxen er fin som den er den. import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: Hihi * Date: 15.feb.2007 * Time: 10:40:51 */ public class MutableComboBoxModel<T> extends AbstractListModel implements ComboBoxModel { private final ArrayList<T> lst = new ArrayList<T>(); private T selectedItem = null; public MutableComboBoxModel() { } public MutableComboBoxModel(List<T> lst, T selectedItem) { setContent(lst, selectedItem); } public void setContent(List<T> list, T selectedObject) { int oldSize = getSize(); int newSize = list == null ? 0 : list.size(); lst.clear(); if (list != null) lst.addAll(list); if (newSize < oldSize) { if (newSize > 0) fireContentsChanged(this, 0, newSize-1); fireIntervalRemoved(this, newSize, oldSize-1); } else if (newSize > oldSize) { if (oldSize > 0) fireContentsChanged(this, 0, oldSize-1); fireIntervalAdded(this, oldSize, newSize-1); } else { if (oldSize > 0) fireContentsChanged(this, 0, oldSize-1); } setSelectedItem(selectedObject); } public void setSelectedItem(Object anObject) { setSelectedItem((T)anObject, false); } public void add(T object){ lst.add(object); } public void removeAllItems(){ lst.clear(); } void setSelectedItem(T anObject, boolean seekPrimary) { if (seekPrimary) anObject = findItem(anObject); selectedItem = anObject; fireContentsChanged(this, -1, -1); } public T getSelectedItem() { return selectedItem; } T findItem(T rec) { if (rec == null) return null; for (int i=0; i < getSize(); i++) { T rec1 = getElementAt(i); if (rec1 != null && equals(rec1, rec)) return rec1; } return null; } private boolean equals(Object o1, Object o2) { return o1 == null || o2 == null ? o1 == o2 : o1.equals(o2); } public int getSize() { return lst.size(); } public T getElementAt(int index) { return lst.get(index); } } Lenke til kommentar
pgdx Skrevet 26. november 2008 Forfatter Del Skrevet 26. november 2008 Tusen hjertelig, dette var kanskje akkurat det jeg var på jakt etter. Programmerer du forresten etter MVC, og har du i så tilfelle boksmodellen i kontrolleren? Lenke til kommentar
HV Skrevet 3. desember 2008 Del Skrevet 3. desember 2008 Tusen hjertelig, dette var kanskje akkurat det jeg var på jakt etter. Programmerer du forresten etter MVC, og har du i så tilfelle boksmodellen i kontrolleren? Ja, men hvis man følger den slavisk så bær den være i controlleren, men personlig så har de som regel havnet inne i panelene da fordi en controller gjerne har mange feks comboboxer å holde styr på... Lenke til kommentar
pgdx Skrevet 3. desember 2008 Forfatter Del Skrevet 3. desember 2008 [...] personlig så har de som regel havnet inne i panelene da fordi en controller gjerne har mange feks comboboxer å holde styr på...Jeg kan ikke se at det kan være en grunn til å ville legge de inn i view. Jeg har nettopp laget et GUI med ~10 comboboxer, og da ble det betydelig mye lettere å holde styr på når jeg flyttet alle boxmodellene inn i kontrolleren. Det er dog et problem hvordan jeg skal gi disse boxmodellene til view-en, foreløpig må jeg bruke setter på én og én (har du et bedre forslag?). I tillegg er det et lite problem, som jeg ikke har fått sett på, at JComboBox ikke endrer på egen størrelse når jeg kun legger til elementer i boxmodellen. Vet du hvordan jeg kan få den til å gjøre dette? Må JComboBox-en ha en egen lytter på boxmodellen? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå