Miért kíván megjelenítőt használni, amikor már láthatta, hogy a munkaterület UI hozzájárulások, mint például a nézetek, szerkesztők, varázslók és párbeszédablakok közvetlenül megvalósíthatók SWT felületi elemek segítségével?
A megjelenítők segítségével felületi elemeket hozhat létre a modellobjektumok használata mellett. Ha közvetlenül használ egy SWT felületi elemet, akkor át kell alakítania az objektumokat SWT által várt karaktersorozatokká és képekké. A megjelenítők adapterekként viselkednek az SWT felületi elemeken, kezelik az általános kódot a kezelő felületi elem események kezeléséhez, amelyeket ellenkező esetben Önnek kellene megvalósítania.
Először egy megjelenítőt tekintünk meg a readme eszköz nézet kiegészítőben, a ReadmeSectionsView elemen belül.
public void createPartControl(Composite parent) { viewer = new ListViewer(parent); ... }
Megjegyzés: A megjelenítők a munkaterület-nézetek és -szerkesztők megvalósítását egyaránt biztosíthatják. A megjelenítő kifejezés nem jelenti azt, hogy csak nézetek megjelenítéséra szolgál. A TextViewert például számos munkaterület és bedolgozó szerkesztő megvalósításánál használják.
A JFace a legtöbb nem szokásos SWT felületi elemhez biztosít megjelenítőt. A megjelenítőket leggyakrabban lista, fa, táblázat és szöveg felületi elemekhez használják.
Minden megjelenítő rendelkezik egy társított SWT felületi elemmel. A felületi elem implicit módon létrehozható a megfelelő megjelenítő konstruktorban a szülő összetétel megadásával, vagy explicit módon: először létrehozza, majd a konstruktorban biztosítja a megjelenítő számára.
A listák, fák és táblák számos közös funkciót osztanak meg a felhasználó szemszögéből, mint például a feltöltés objektumokkal, kiválasztás, rendezés és szűrés.
Ezek a megjelenítők egy listát tartanak fenn a tartományobjektumokról (amelyeket elemeknek hívnak), és megjelenítik őket a megfelelő SWT felületi elemben. A listamegjelenítő tudja, hogy a szövegcímke hogyan kérhető le a lista tetszőleges elemétől. Lekér egy címkét az ILabelProvider elemtől, amely beállítható a megjelenítőn. A listamegjelenítők tudják, hogyan képezhetők le a felületi elem visszahívások a megjelenítő ügyfél által ismert elemekre.
Az egyszerű SWT felületi elemet használó ügyfeleknek SWT szinten kell működniük - amelyben az elemek karaktersorozatok és események, és gyakran kapcsolódnak egy indexhez a karaktersorozatok listáján belül. A megjelenítők magasabb szintű szemantikát biztosítanak. Az ügyfelek értesítést kapnak a listakiválasztásokról és -módosításokról a megjelenítő számára biztosított elemek segítségével. A megjelenítő kezeli az indexek elemekre leképezését az objektumok szűrt nézetének szabályozásához, és szükség szerinti újrarendezéséhez.
A szűrési és rendezési képesség a megjelenítőrendező (ViewerSorter) és/vagy megjelenítőszűrő (ViewerFilter) megjelenítőhöz kijelölésével kerül kezelésre. (Ezek a listamegjelenítőkön kívül fa- és táblázatmegjelenítőkhöz is megadhatók.) Az ügyfélnek csak egy osztályt kell biztosítania, amely össze tudja hasonlítani vagy szűrni tudja a listában lévő objektumokat. A megjelenítő kezeli a lista feltöltésének részleteit a megadott sorrendnek és szűrőnek megfelelően, valamint a sorrend és szűrő karbantartását elemek hozzáadásakor és eltávolításakor.
A megjelenítőket az ügyfelek nem tervezik kiterjeszteni. A megjelenítő testreszabásához beállíthatók saját tartalom- és címkeszolgáltatók.
A ListViewer leképezi a listában lévő elemeket egy SWT lista vezérlőre.
A TreeViewer a hierarchikus objektumokat egy SWT fa felületi elemben jeleníti meg. Ez kezeli az elemek kibontásának és összehúzásának részleteit. Számos különböző famegjelenítő áll rendelkezésre a különböző SWT favezérlőkhöz (egyszerű fa, táblázatfa, jelölőnégyzet fa).
A TableViewer nagyon hasonlít a listamegjelenítőre, de többoszlopos információk is megjeleníthetők a táblázat elemeihez. A táblázatmegjelenítők jelentősen kiterjesztik az SWT táblázat felületi elem funkcióját a szerkesztőcella fogalmának bevezetésével.Speciális cellaszerkesztők használhatók annak engedélyezéséhez, hogy a felhasználók szerkeszthessék a táblázatcellát egy legördülő lista, párbeszédablak vagy szöveg felületi elem segítségével.A táblázatmegjelenítő kezeli ezen felületi elemek létrehozását és elhelyezését, ha szükséges a felhasználó szerkesztéshez. Ez CellEditor osztályok segítségével valósítható meg, mint például a TextCellEditor és CheckboxCellEditor. Egy virtuális táblázat csak a megtekintéskor kerül feltöltésre, a táblázatmegjelenítő csak egy megadott számú eredményt futtat függetlenül attól, hogy valójában mi került létrehozásra.Az adatbázis "késleltetetten" kéri a JIT-t és egyszerre csak egy előre meghatározott számú elemet kérdez le.
A szöveg felületi elemek számos közös szemantikával rendelkeznek, mint például a dupla kattintás viselkedése, a visszavonás, színezés és navigálás index vagy sor segítségével. A TextViewer egy adapter az SWT StyledText felületi elemhez.A szövegmegjelenítők egy dokumentummodellt biztosítanak az ügyfélhez és kezelik a dokumentum stílussal rendelkező szöveginformációra átalakítását, amelyet a szöveg felületi elem biztosít.
A szövegmegjelenítőkkel kapcsolatos részletes információkat a Munkaterület-szerkesztők rész tartalmaz.
A megjelenítő megértéséhez meg kell ismernie a megjelenítő bemeneti eleme, ennek tartalma és kiválasztása, valamint a felületi elemben aktuálisan megjelenített információk közötti kapcsolatot, amelyet kezel.
A bemeneti elem a fő objektum, amelyet a megjelenítő megjelenít (vagy szerkeszt). A megjelenítő szemszögéből egy bemeneti elem tetszőleges objektum lehet. Nem tételezi fel, hogy bármely adott felületet a bemeneti elem valósít meg. (Azt, hogy miért, rögtön látni fogjuk a tartalomszolgáltatóknál.)
A megjelenítőnek tudnia kell kezelni a bemeneti elem módosítását. Ha egy új elem van beállítva a megjelenítőben, akkor újból fel kell tölteni a felületi elemet az új elemnek megfelelően, és meg kell szüntetni az előző elemmel társítását. Bemeneti elemen a felületi elem figyelőnkénti bejegyzésének és feltöltésének szemantikája olyan elemre épül, amely minden megjelenítő esetén különbözik.
A tartalommegjelenítő egy megjelenítő, amely jól meghatározott protokollal rendelkezik az információk bemeneti elemből lekéréséhez. A tartalommegjelenítők két speciális súgóosztályt - IContentProvider és ILabelProvider - használnak, a felületi elem kitöltéséhez és a bementi elemmel kapcsolatos információk megjelenítéséhez.
IContentProvider alap életciklus protokollt biztosít a tartalomszolgáltó bemeneti elemmel társításához, és a bemeneti elem módosításának kezeléséhez. A különböző típusú megjelenítőkhöz speciálisabb tartalomszolgáltatók kerülnek megvalósításra. A legáltalánosabb tartalomszolgáltató az IStructuredContentProvider, amely egy objektumlistát biztosíthat egy megadott bemeneti elemmel. Ezt a listaszerű megjelenítők használják, mint például a listák, táblázatok és fák. A tartalomszolgáltató általában tudja, hogyan képezhető le a bemeneti elem a várt megjelenítőtartalomra.
ILabelProvider egy lépéssel tovább megy. A megjelenítő tartalmának megadásával (a bemeneti elemből és a tartalomszolgáltatóból kerül származtatásra) előállíthatja a speciális UI elemeket, mint például a nevek és ikonok, amelyek szükségesek a tartalom megjelenítőben megjelenítéséhez. A címkeszolgáltatók segíthetnek az ikonerőforrások mentésében, mivel ugyanazt az ikonpéldányt biztosítják, mint amelyet az összes hasonló típus használ a megjelenítőben.
Megjegyzés: Adott tartalom- és címszolgáltató példányai nem kerülnek megosztásra több megjelenítő között. Ha az összes megjelenítő ugyanazt a tartalom- vagy címkeszolgáltató-típust használja, akkor minden megjelenítőt inicializálni kell a saját szolgáltatóosztály-példányával. A szolgáltató életciklus-protokollt a szolgáltató és a megjelenítő közötti 1-1 kapcsolthoz tervezték.
Bemeneti elemek, tartalomszolgáltatók és a címkeszolgáltatók segítségével a megjelenítők el tudják rejteni a felületi elem-feltöltés megvalósítási részleteinek nagy részét. A megjelenítő ügyfeleinek csak a megjelenítő megfelelő típusú bemenettel és tartalomszolgáltatóval feltöltésével kell törődniük. A címkeszolgáltatónak tudnia kell, hogy az UI információk hogyan származtathatók a megjelenítőtartalomból.
Egy címkeszolgáltató a szövegnél és egy képnél többet képes megjeleníteni. A JFace számos osztályt és felületet biztosít a legnépszerűbb extra funkcionalitások támogatására. A következő osztályokat támogatja a TableViewer, AbstractTreeViewer és a TableTreeViewer:
Az Eclipse 3.1 változatban egy nézet színeit két módon lehet befolyásolni - vagy a saját címkeszolgáltatójával vagy egy színeket és betűtípusokat beállító díszítővel. Általában jobb a címkeszolgáltatók szín- és betűkészlet támogatását használni, mivel a díszítők az összes, adott típust megjelenítő nézetre hatással vannak. Ha egy szín- vagy betűtípus díszítőt használ, ellenőrizze, hogy annak értékeit be lehet állítani a Színek és betűtípusok beállításoldalon.
A megjelenítők, valamint a tartalom- és címkeszolgáltatók által biztosított rugalmasság demonstrálható, ha megnézzük, hogy a munkaterület hogyan használja őket.
A WorkbenchContentProvider egy strukturált tartalomszolgáltató, amely lekéri egy bemeneti elem tartalmát a leszármazottak kérésével. Az adapterek alapelve újból felhasználásra kerül az általános funkció megvalósítása érdekében. Amikor lekéri az elemek listáját a bemeneti elemből, akkor a WorkbenchContentProvider lekér egy IWorkbenchAdapter elemet a bemeneti elemhez. Amennyiben bejegyzésre került egy IWorkbenchAdapter a bemeneti elemhez, akkor a tartalomszolgáltató biztonságosan feltételezheti, hogy az elem lekérdezhető a leszármazottakhoz. WorkbenchContentProvider végrehajtja a megjelenítő aktuálisan tartásához szükséges munkát a munkaterület módosításakor.
A WorkbenchLabelProvider egy címkeszolgáltató, amely egy IWorkbenchAdapter elemet kér le az objektumtól a szöveg és kép megkeresése érdekében. A címkeszolgáltató alapelve különösen hasznos a munkaterület-objektumokhoz, mivel lehetővé teszi, hogy a címkeszolgáltató ideiglenes eltárolja a megjelenítőben általános használt képeket. Ha a WorkbenchLabelProvider például lekér egy képet az IProject elemhez, akkor ideiglenesen eltárolhatja a képet, és újból használhatja az összes megjelenítőben megjelenő IProject objektumhoz.
Egy általános IWorkbenchAdapter adapter megadásával, és számos platformtípushoz regisztrálásával lehetővé tehető, hogy ezen típusok megfelelően jelenjenek meg számos általános megjelenítőben és az őket tartalmazó munkaterület-nézetekben.