[Java lista] JComboBox(hash)

bognár attila attila at netalfa.hu
2006. Dec. 14., Cs, 14:21:33 CET


szia,

>> szerintem érdemes lenne elolvasni egy swing tutorial és átnézni kicsit a 
>> swing API-t, ugyanis a swing gyakorlatilag MVC felépítésű, minden 
>> megjelenített elemnek van egy "Model" háttere, valamint egy "Renderer" 
>> foglalkozik a megjelenítéssel. Ja, és OO :-)
>>     
>
> Van még kiválasztás modell is, azt kihagytad :) (igaz comboboxnál pont 
> nincs ;)
>   

mármint a selection modelre gondolsz? de az már a view része alapvetően, 
MVC síkon annak nem sok szerepe van.


>> az összetettségből kifolyólag több lehetőség is van megvalósítani azt, 
>> amit akarsz:
>> - készítesz egy saját renderert
>> - amint egy másik kolléga írta a "bab" toString metódusát 
>> felüldefiniálod, esetleg az equals-t is.
>>
>> jelen esetben valószínűleg a második egyszerűbb.
>>     
>
> Tudnál esetleg mondani egy cimet, ahol valami leiras van, hogy pontosan 
> mely rutinokat is kellene átírni? Vagy egy példát, vagy valamit?
> (Az eredeti kérés is ez volt :) Nem vagyok túl gyakorlott javaban... :(
>   

az api doc-ban van példa a renderer testre szabására (ilyenre még nem 
volt szükségem), lásd ListCellRenderer interface (amit nem értek benne, 
az a JList paraméter, de kis utánajárással biztos meg lehetne fejteni)


>> ui: azért lássuk be, hogy egy hash alapú combobox nem feltétlenül lenne 
>> célravezető, hiszen fontos a sorrend, egy hash pedig ilyen apróságokkal 
>> nem foglalkozik.
>>     
>
> Ez mondjuk inkabb a hash megvalositas hianyossaga, hogy nincs sort... :)))
> De ha nem tetszik a hash, lehet felolem 2 vector vagy tömb vagy akármi, 
> lényeg hogy kulcs-érték párokkal dolgozzon.
>   

innentől kezdve az a kérdés, hogy mit tekintünk hash-nak. az én 
megközelítésem szerint a hash egy olyan doboz, amibe kulcs alapján 
beteszik valamit, majd ugyanazt visszakapom a kulcs alapján.
(például ruhatár: engem nem érdekel, hogy hova akasztja a kabátot, a 
lényeg, hogy a biléta alapján visszakapjam)


>> ha mégis ilyen kell, akkor kell egy saját 
>> ComboBoxModelt csinálni, ami biztosítja a funkcionalitást valamilyen 
>> módon. nem nehéz.
>>     
>
> Biztosan nem, ha már csináltál ilyet... ;)
>   

Két út van: megvalósítod a ComboBoxModel interface-t, vagy felül 
definiálod a DefaultComboBoxModelt. Annyira szerintem nem vészes dolog. 
+ rendelkezésre áll a java forrása, ha a DefaultComboBoxModelről kellene 
info.

A lényeg valahol ott van, hogy pl a DefaultComboBoxModelben pl felül 
kell definiálni az addElement metódust, mely két dolgot csinál: meghívja 
az ős metódust, és beregisztrálja az objektumodat egy belső hash-be. 
Hátramaradó feladatok: egy metódus, ami proxy-ként szerepel a hash felé 
(get, remove), valamint a remove*Element* metódusok felüldefiniálása az 
addElement-hez hasonlóan, azaz ne maradjon szemét a belső hash-ben.


>> hogy miért nem így van alapból? mert ez alapvetően nem 
>> OO és ez a megvalósítás gyengítené a rugalmasságot és a lehetőségek 
>> tárházát, esetleg rossz irányba vezetné el a tisztelt fejlesztők 
>> fantáziáját :-)
>>     
>
> Miert nem oo? Most is megadhatsz mondjuk vectort, az akkor nem oo?
> Egyébként meg azért lenne értelme, mert mint írtam is, pont az MVC miatt 
> szinte mindig kódokkal dolgozol, és megjelenítésnél jelennek csak meg az 
> értékek.  Nyugodtan bele rakhattak volna alapól egy ilyen modellt is, 
> attól nem sérülne se az oo, se a rugalmasság ;)
>   

A hash alapú megközelítés (jelen esetben) azért nem OO, mert az már egy 
konkrét objektum azonosítási megvalósítás, azaz nem objektumok alapján 
kezeled a listát, hanem valamilyen specifikus tulajdonság alapján. Mi 
van akkor, ha egy kulccsal (egy jellemzővel) nem is tudod azonosítani?

Ilyen megvalósítás is készülhetett volna: biztos, de én eddig nem igazán 
láttam hiányát ebben a formában, a dolog másik fele, hogy ilyen 
megközelítéssel valószínűleg nagyon sokféle megvalósítást bele kellett 
volna tenni, ami a java api-nak valószínűleg nem célja.

attila


--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20061214/74333076/attachment.html 


További információk a(z) Javalist levelezőlistáról