Mezősegéd

A felhasználó gyakran várja szöveges információk megadását egy egyszerű mezőben, mint például a szöveges mező vagy legördülő lista. Annak ellenére, hogy általában ezen mezőket feltöltő alkalmazáskód sokkal egyszerűbb, mint az összetett felületi elemeket - mint például a táblázat vagy fa - feltöltő kód, ezek az "egyszerű" mezők általában terhet rónak a felhasználóra. A felhasználónak azonosítania kell, hogy mely mezők igényelnek tartalmat, a mező érvényes tartalommal rendelkezik-e és milyen választások elvártak. A JFace mezősegéd támogatás osztályokat biztosít, amelyek segítenek a felhasználónak, hogy végigmenjen a bemeneti feladatokon.

Az org.eclipse.jface.fieldassist csomag kétféleképp biztosít támogatást. A kiemelt mezők támogatása lehetővé teszi képkiemelések megadását, amelyek tájékoztatják a felhasználót egy adott mező állapotáról. A Tartalomajánlat támogatás lehetővé teszi egy tartalomsegéd előugró menü megadását, amely a felhasználó számára tartalomválasztást kínál.

Kiemelt mezők

A kiemelt mezők lehetővé teszik képkiemelések elhelyezését az ablakban vagy párbeszédablakban megadott mezők mellett. Kiemelés a mező négy sarkának egyike mellé helyezhető. A megjelenítőhöz hasonlóan a kiemelt mező célja, hogy funkcionalitást adjon egy SWT vezérlőelemhez, mialatt az alapul szolgáló vezérlőelemhez hozzáférést biztosít. A DecoratedField API lehetővé teszi kiemelések hozzáadását, elrejtését és megjelenítését a mező mellett. Az alapul szolgáló vezérlőelemhez hozzáférés biztosított, így használhatja a meglévő SWT alkalmazás programozási felületet az alapul szolgáló vezérlőelem befolyásolására, mint például a tartalom, szín vagy betűtípus beállítása.

Kiemelt mező létrehozása

Kívülről a kiemelt mező úgy viselkedik, mint egy vezérlőelem. Belsőleg a kiemelt mezők összetett vezérlőelemet használnak a mező illetve annak kiemeléseinek elrendezésének kezeléséhez. A legtöbb rész esetén az ügyfélalkalmazásra ennek nem szabad hatással lennie. Ez azt jelenti, hogy a kiemelt mezőnek kell végrehajtania a vezérlőelem tényleges létrehozását. Tekintse meg például ezt a részletet, amelyben az alkalmazás a párbeszédablakok egyikében létrehoz egy szöveges vezérlőelemet:

...
// Szövegmező létrehozása
Text text = new Text(parent, SWT.BORDER);
text.setText("some text"); 
...

A mező kiemelése érdekében a mező a következő módon kerül létrehozásra:

...
// Kiemelt mező létrehozása egy szöveges vezérlőelemhez
DecoratedField field = new DecoratedField(parent, SWT.BORDER, new TextControlCreator());
Text text = (Text)field.getControl();
text.setText("some text");
...

Az alap vezérlőelem létrehozásához használttal megegyező szülő és stílus bitek kerülnek felhasználásra a kiemelt mező létrehozásához. A kód elsődleges különbsége, hogy az IControlCreator egy példánya biztosított, amely létrehozza a mezőben szükséges adott típusú vezérlőelemet. Szöveges mezők esetén a TextControlCreator használható a vezérlőelem létrehozására. Azonban megvan az a rugalmasság, hogy a IControlCreator megvalósításával bármely típusú vezérélőelem létrehozható a mezőben, mint például a legördülő lista vagy a léptető.

Kiemelések használata

Kiemelt mezőhöz létrehozás után kiemelések adhatók a négy hely egyikén. Az SWT helykonstansok megadják a kiemelések helyét. Kiemelés hozzáadásához meg kell adni egy FieldDecoration elemet, amely megadja a kiemelés képét és (elhagyható) egy leíró szöveget, amely akkor jelenik meg, ha a felhasználó a kiemelés felett tartja az egeret.

...
// Mezőkiemelés létrehozása és mezőhöz adása
Image image = JFaceResources.getImage("myplugin.specialimage");
FieldDecoration mySpecialDecoration = new FieldDecoration(image, "Ez a mező speciális");
field.addFieldDecoration(mySpecialDecoration, SWT.TOP | SWT.LEFT, false);
...

A logikai paraméter megadja, hogy a kiemelésnek csak akkor kell-e megjelennie, amikor a vezérlőelemen van a fókusz, vagy mindig meg kell jelennie. Ebben az esetben a kiemelés mindig megjelenik. De lehetnek olyan időpontok, amelyben a kiemelést el kell rejteni vagy meg kell jeleníteni. A következő részlet elrejti a már létrehozott kiemelést.

...
// Történt valami, ami miatt el akarom rejteni a kiemelést
field.hideDecoration(mySpecialDecoration);
...

A kiemelés képének vagy leírásának frissítésekor a mezőnek értesítést kell kapnia, így a kiemelés újrarajzolható.

...
// Valami, ami a mezőt extra speciálissá tette
mySpecialDecoration.setDescription("A mező extra speciális");
field.updateDecoration(mySpecialDecoration);
...

Kiemelt és nem kiemelt mezők elrendezése

Kiemelt mező párbeszédablakon vagy ablakon belüli elrendezésekor az alapul szolgáló egyszerű kezelőszerv helyett a mező elrendezés vezérlőelemét kell elrendezni. Tekintse meg újra a kódot egy szöveges vezérlőelem létrehozásához. Egy szöveges vezérlőelem elrendezésekor az alkalmazás beállítja a vezérlőelem elrendezési adatait.

...
// Szövegmező létrehozása
Text text = new Text(parent, SWT.BORDER);
text.setText("some text");
// Elrendezési elrendezés beállítása
GridData data = new GridData(IDialogConstants.ENTRY_FIELD_WIDTH, SWT.DEFAULT);
text.setLayoutData(data); 
...

Kiemelt mező elrendezésekor az alkalmazásnak a mező elrendezés vezérlőelemén kell hagynia az elrendezési adatokat. A kívánt elrendezéstől függően elképzelhető, hogy a mező méretét a kiemelés méretéhez kell igazítani.

...
// Kiemelt mező létrehozása egy szöveges vezérlőelemhez
DecoratedField field = new DecoratedField(main, SWT.BORDER, new TextControlCreator());
Text text = (Text)field.getControl();
text.setText("some text");
// Elrendezési adatok beállítása
GridData data = new GridData(IDialogConstants.ENTRY_FIELD_WIDTH + 
   FieldDecorationRegistry.getDefault().getMaximumDecorationWidth(), SWT.DEFAULT);
field.getLayoutControl().setLayoutData(data); 
...

A mezősegéd-támogatás nem igényli vagy nem feltételezi, hogy egy adott párbeszédablakban vagy ablakban csak kiemelt mezők legyenek. Az ablak elrendezése bonyolultabb lehet, ha kiemelt és egyszerű mezőket egyaránt használ. A kiemelt és nem kiemelt mezők igazítása érdekében figyelembe kell vennie a kiemelés szélessége által létrehozott behúzást. A kiemelés szélessége egyszerűen a kép szélessége. A dolgok különböző szélességű kiemelések használata esetén bonyolultabbá válhatnak. Ebben az esetben a dolgok a kiemelések FieldDecorationRegistry elemben bejegyzésével egyszerűsíthetők.

Mezőkiemelés-nyilvántartás

A mezőkiemelés-nyilvántartás lehetővé teszi a mezőkiemelések bejegyzését és elérését egy karaktersorozat-azonosító segítségével. Ez módszert biztosít az alkalmazásban használt kiemelésekre hivatkozáshoz. Megadhat egy alkalmazás programozási felületet, amely kiteszi a kiemelésazonosítókat, ha más bedolgozók számára elérhetővé kívánja őket tenni. Ne feledje el, hogy a kiemelés bejegyezése a kiemelésen belül lévő képek életciklusát nem kezeli. Az alkalmazás dönthet ezen képek kezelésének módjáról. A JFace képnyilvántartás például segítségével bejegyezhető és kezelhető a kép életciklusa. Vagy az alkalmazás létrehozhat a képet igény szerint, majd törölheti, ha már nincs rá szükség. A FieldDecorationRegistry elem bejegyzési módszeréhez tartozó Javadoc a képek megadására szolgáló különböző lehetőségeket mutatja be egy kiemelés bejegyezésekor.

A kiemelések mezőkiemelés-nyilvántartásban bejegyzésekor az elrendezési folyamat is egyszerűsíthető a kiemelt (és nem kiemelt) mezők vegyes alkalmazása esetén. Alapértelmezésben a kiemelt mező a kiemelés maximális szélességének meghatározása érdekében megnézi a kiemelésnyilvántartást és biztosítja, hogy minden kiemelés ezt a szélességet használja. Ez azt jelenti, hogy minden kiemelt mező megfelelően lesz igazítva az adott kiemelés szélességétől függetlenül. Nem kiemelt mezők igazításához a FieldDecorationRegistry protokoll segítségével elérheti a legnagyobb kiemelés szélességét és létrehozhatja a szükséges behúzást.

...
// Szövegmező létrehozása
Text text = new Text(parent, SWT.BORDER);
text.setText("some text");
// Elrendezési adatok beállítása
GridData data = new GridData();
data.horizontalAlignment = SWT.FILL;
data.horizontalIndent = FieldDecorationRegistry.getDefault().getMaximumDecorationWidth();
text.setLayoutData(data); 
...

A mezősegéd-támogatás nem jelzi a kiemelések használati módját, de a nyilvántartás az alkalmazások által egy mező adott állapotának megjelenítéséhez használható általános kiemeléseket is megadja. A következő részlet például általános kiemelést használt a kötelező mezőkhöz:

...
// Kiemelt mező létrehozása kötelező mezőkiemeléssel.
DecoratedField field = new DecoratedField(main, SWT.BORDER, new TextControlCreator());
FieldDecoration requiredFieldIndicator = FieldDecorationRegistry.getDefault().
   getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED);
field.addDecoratedField(requiredFieldIndicator, SWT.BOTTOM | SWT.LEFT, false);
...

Tartalomajánlatok

A mezők kiemelésekkel ellátásán felül az alkalmazások tartalomajánlati segédet biztosíthat, amely a mezőhöz egy ajánlat előugró menüt aktivál. Telepíthet egy ContentProposalAdapter elemet egy tetszőleges vezérlőelemen ezen viselkedés biztosítása érdekében. A következő részlet egy tartalomajánlati adaptert telepít a szöveges vezérlőelemen. Ne feledje el, hogy a szöveges vezérlőelem az alkalmazás által közvetlenül létrehozott vagy egy kiemelt mezőtől beszerzett vezérlőelem lehet.

...
autoActivationCharacters = new char[] { '#', '(' };
keyStroke = KeyStroke.getInstance("Ctrl+Space");
// tételezzük fel, hogy a myTextControl már létre lett hozva valamilyen módon
ContentProposalAdapter adapter = new ContentProposalAdapter(
	myTextControl, new TextContentAdapter(), 
	new SimpleContentProposalProvider(new String [] {"ProposalOne", "ProposalTwo", "ProposalThree"}),
	keyStroke, autoActivationCharacters);

A vezérlőelem tartalmának lekéréséhez vagy beállításához, amikor a felhasználó egy ajánlatot választ az előugró menüben, az adaptert az IControlContentAdapter egy példányával kell biztosítani, amely le tudja kérni és be tudja állítani egy adott típusú vezérlőelem tartalmát. Szöveges mezők esetén használhatja a TextContentAdapter osztályt. Megvalósíthatja az IControlContentAdapter elemet a tartalomajánlati adapter más típusú vezérlőelemmel használata érdekében.

Tartalomajánlati adapter létrehozásakor az IContentProposalProvider példányát is megadhatja, amelyből az ajánlatok maguk lekérésre kerülnek. A szolgáltató felelős a tartalomajánlatok tömbjének visszaadásáért. Maguk az ajánlatok az IContentProposal példányaként adhatók meg, amelyből az ajánlat címkéje és tartalma lekérhető, más információkon felül, mint például az ajánlat részletes leírása.

A fenti példában a SimpleContentProposalProvider kerül alkalmazásra. A szolgáltató egy egyszerű karaktersorozat-tömb tartalomajánláskénti megadásával határozható meg. Az egyszerű szolgáltató a karaktersorozatok várt IContentProposal elemre leképezéséhez szükséges protokollt valósítja meg. Az IContentProposalProvider rugalmassága lehetővé teszi egy ajánlásszolgáltató megvalósítását speciális szolgáltatásokkal, mint például az ajánlások szűrése a vezérlőelem tartalma alapján, magyarázó címkék megadása az előugró menüben a beszúrandó tényleges tartalom helyett és a várt kurzorpozíció megadása a beszúrt ajánlás után. Összetett használat érdekében tekintse meg a Mezősegéd példa részt és keresse meg az IContentProposalProvider megvalósítóit.

Tartalomajánlat-adapter beállítása

Láthattuk, hogy a tartalomajánlat-adapter alap definíciója tartalmazza a vezérlőelemet, amelyhez az ajánlások biztosítottak, a vezérlőelem tartalmát módosító tartalomadaptert és az ajánlatok listáját az előugró menüben megadó ajánlatszolgáltatót. Ezen alapokon felül számos módszer áll rendelkezésre a tartalomajánlat-adapter beállítására:

A Mezősegéd példa lehetővé teszi a különböző lehetőségek beállítását a példabeállításokban és a különböző kombinációk kipróbálását. Az adapter például beállítható, hogy explicit módon kerüljön meghívásra egy billentyűleütéssel és beszúrja az ajánlat tartalmát a vezérlőelembe, azáltal a szövegszerkesztő-tartalomsegédhez hasonlóan működik. Vagy beállítható explicit billentyűleütés, automatikus aktiválási karakterek és tartalomhelyettesítés nélkül, így a webböngésző URL-ben vagy a keresési mezőkben használt előregépelési befejezési stílushoz hasonlóan működik. Ezen módszerekkel és együttműködésükkel kapcsolatos részletesebb információkat a Javadoc tartalmaz.

Munkaterület mezősegéd

A mezősegéd-támogatás JFace szinten az alkalmazás számára nagyfokú rugalmasságot biztosít a mezők kiemelésének és a mezőtartalom-ajánlások megjelenítési módjának meghatározásában. Ez önálló JFace alkalmazások vagy gazdag ügyfélalkalmazások esetén kívánatos. Ha az alkalmazás más bedolgozókkal, mint például az Eclipse SDK vagy harmadik féltől származó bedolgozók, integrálódik, akkor a mezősegéd-támogatást valószínűleg a többi bedolgozóval konzisztens módon kívánja használni. A munkaterület adott típusú interakciókhoz mezősegédet használó segédprogramosztályokat ad meg.

Például a ContentAssistField osztály létrehoz egy mezőt, amely egy 'villanykörte' kiemelést tartalmaz a felhasználó számára annak jelzéséhez, hogy a tartalomsegéd rendelkezésre áll. Egy tartalomajánlat-adaptert is beállít a tartalomsegédstílus-beszúráshoz. Végül egy kezelőt biztosít a munkaterület szintű tartalomsegéd-parancshoz, így a tartalomajánlat előugró menü megnyílik, amikor a felhasználó meghívja a billentyűleütést vagy a munkaterület billentyűkombinációi között megadott kombinációt aktivál. A segédprogramosztályokkal kapcsolatos további részleteket az org.eclipse.ui.fieldassist csomag tartalmaz.

A csomag kibontása várhatóan akkor történik, amikor a munkaterület kibővíti a mezősegéd használatát és szabványosítja adott mezőállapotok kiemelésének használatát.