Grafika

Az SWT grafikus alrendszert biztosít a rajzobjektumokhoz és a képek felületi elemekben megjelenítéséhez. Grafikus felületek programozása nélkül is elérheti a szükséges dolgokat, mivel a felületi elemek kezelik az ikonok képeit, szöveget és egyéb adatokat. Ha azonban az alkalmazások egyéni grafikákat jelenítenek meg, vagy egyéni rajzolt felületi elemet valósít meg, akkor meg kell ismerni az alap rajzobjektumok néhány alapvető tulajdonságát SWT-ben.

Grafikus kontextus

A grafikus kontextus - GC - az SWT grafikus támogatás fókuszpontja. Ennek alkalmazás programozási felülete leírja az SWT összes rajzfunkcióját.

A GC rajzolásra használható vezérlőelemen (a legáltalánosabb eset), képen, megjelenítőn vagy nyomtatón. A vezérlőelemen rajzoláshoz használhatja a vezérlő rajzeseményén biztosított GC-t. Képen, megjelenítőn vagy nyomtatón rajzoláshoz létre kell hozni egy beállított GC-t és a használat befejezése után el kell távolítani.

Ha rendelkezik GC-vel, akkor beállíthatja az attribútumait - mint például a szín, sorszélesség és betűkészlet -, amelyek szabályozzák a GC-ben rajzolt grafikák megjelenését.

A GC API hivatkozás a grafikai funkciók teljes halmazát írja le.

Betűkészletek

A Font és FontData osztályokat a rendszer az SWT betűkészleteinek kezelésekor használja.

A FontData a betűkészlet jellemzőit írja le. A betűkészlet nevének, stílusának és méretének megadásával létrehozható egy FontData osztály. A FontData egy alkalmazás programozási felületet biztosít az attribútumok lekérdezéséhez. Mivel a FontData nem foglal le operációs rendszer erőforrásokat, ezeket nem kell eltávolítania.

A Font a rajzoló alkalmazás programozási felületen használt betűkészletet ábrázoló aktuális grafikus objektum. A kívánt betűkészlet Display és FontData elemének megadásával a Display osztályhoz létrehozhat egy Font osztályt. A FontData elemhez lekérdezhet egy Font osztályt.

A használat befejezése után a lefoglalt Fontot el kell távolítani.

Színek

A színek a betűkészletekhez hasonlóak. A kívánt szín RGB értékeinek megadásával a Display osztályhoz létrehozhat egy Color osztályt. El kell távolítani a lefoglalt színt, ha már nem használja.

A Display getSystemColor(int) metódusa segítségével lekérdezheti az operációs rendszer platform előre meghatározott rendszerszíneit. A módszer segítségével lekért színek nem szabadíthatók fel.

A színmodell részletes leírását az SWT színmodell cikk tartalmazza.

Képek

A képek SWT-ben kezeléséhez használt Image, ImageData és ImageLoader osztályok.

Az ImageData leírja a kép aktuális képpontjait, a PaletteData osztály segítségével pedig a kihasznált színértékeket. Az ImageData a kép eszköz- és platform-független leírása.

Az ImageLoader betölti és elmenti az ImageData elemet különböző formátumokban. Az SWT pillanatnyilag a BMP (Windows Bitmap), ICO (Windows Icon), JPEG, GIF és PNG képformátumok betöltését és mentését támogatja.

Az Image a rajzoló alkalmazás programozási felületen használt képet ábrázoló aktuális grafikus objektum. Létre lehet hozni képet egy adott Display elemhez. A képek többféleképp létrehozhatók:

Az Image létrehozásának módjától függetlenül Ön a felelős az eltávolításáért.

A grafikus objektum életciklusa

Az SWT-n rajzoláshoz használt grafikus objektumok nagy része az alapul szolgáló operációs rendszeren foglal le erőforrásokat, és ezeket explicit módon fel kell szabadítani. Erre a korábban bemutatott szabály érvényes. Ha egy konstruktor segítségével hozza létre, akkor fel kell szabadítani. Ha máshonnan éri el, akkor nem kell felszabadítani.

Létrehozás

A grafikus objektumok - mint például a grafikus kontextusok, betűkészletek, színek és képek - az objektum létrehozásakor lefoglalásra kerülnek az operációs rendszeren. A grafikus objektumok használatának módja meghatározza a létrehozás idejét.

Az alkalmazáson gyakran használt grafikus objektumok létrehozhatók a felületi elemekkel együtt. Ez általánosan színek és betűkészletek esetén használatos. Ezért érdemes a grafikus objektumokat menet közben létrehozni. Létrehozhat például egy grafikus kontextust az egyik felületi elem eseménykezelőben néhány számítás végrehajtása érdekében.

Ha egy egyéni felületi elemet valósít meg, akkor a grafikus objektumok jellemzően a konstruktorban kerülnek lefoglalásra, ha mindig használja őket. Ha nem mindig használja őket, vagy ha bizonyos attribútum állapotától függenek, akkor lefoglalhatja őket menet közben.

Festés

A grafikus objektumok lefoglalása után készen áll a festésre. A festést mindig a festésfigyelőben kell végrehajtani. Ritka eset, különösen egyéni felületi elemek megvalósításakor, hogy fest, miközben más eseményre válaszol. Ez általában ellenjavallt. Ha úgy gondolja, hogy festenie kell más esemény kezelése közben, akkor először a redraw() metódust kell használnia, amely az operációs rendszeren létrehoz egy másik festés eseményt. A festés metóduson kívüli rajzolás meghiúsítja a platform optimalizálást, és hibákat okozhat attól függően, hogy mennyi függőben lévő festés található az eseménysorban.

Festés esemény érkezésekor a rendszer egy GC-t biztosít, amely előre be van állítva a felületi elemben rajzoláshoz. Ne szabadítsa fel ezt a GC-t! Nem Ön hozta létre.

A többi grafikus objektumot az esemény kezelése során (vagy előtte) kell lefoglalni. Az alábbi részlet az org.eclipse.swt.examples.HelloWorld5 példára épül. A vörös szín a felületi elem létrehozásakor már lefoglalásra került, így itt használhatja.

   shell.addPaintListener (new PaintListener () {
      public void paintControl (PaintEvent event) {
         GC gc = event.gc;
         gc.setForeground (red);
         Rectangle rect = event.widget.getClientArea ();
         gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20);
         gc.drawString (resHello.getString("Hello_world"), rect.x + 20, rect.y + 20);
      }
   });

Eltávolítás

Használat után minden lefoglalt grafikus objektumot fel kell szabadítani.

Az eltávolítás időzítése az objektum létrehozási idejétől függ. Ha létrehoz egy grafikus objektumot a felületi elem létrehozása közben, akkor általánosan hozzá kell adni egy eltávolítás-figyelőt a felületi elemhez, és el kell távolítani a grafikát a felületi elem eltávolításakor. Ha a festés során menet közben hoz létre egy objektumot, akkor a festés befejezésekor el kell távolítani.

A következő kódrészlet a festésfigyelő kissé módosított változata. Ebben a példában festés közben lefoglalja és felszabadítja a vörös színt.

   shell.addPaintListener (new PaintListener () {
      public void paintControl (PaintEvent event) {
         GC gc = event.gc;
         Color red = new Color (event.widget.getDisplay (), 0xFF, 0, 0);
         gc.setForeground (red);
         Rectangle rect = event.widget.getClientArea ();
         gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20);
         gc.drawString (resHello.getString ("Hello_world"), rect.x + 20, rect.y + 20);
         red.dispose ();
      }
   });