V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!

Standard Widget Toolkit

Z Multimediaexpo.cz

(Rozdíly mezi verzemi)

Verze z 16. 9. 2012, 12:08


Standard Widget Toolkit (SWT) je knihovna grafických uživatelských prvků pro platformu Java. Původně byla tato knihovna vyvinuta firmou IBM a nyní je ve správě nadace Eclipse Foundation, spolu s projektem Eclipse IDE. Je alternativou k AWT a Swing - GUI nástrojů od společnosti Sun Microsystems jako součást Java Platform, Standard Edition.

Knihovna SWT je napsaná v Javě. K vykreslovaní prvků GUI používá nativní knihovny operačních systémů prostřednictvím JNI (Java Native Interface), a to obdobným způsobem jako programy psané s použitím nativního API operačního systému. Programy používající SWT jsou přenosné, ale implementace "toolkitu", ačkoliv je napsán v Javě, je unikátní pro každou platformu.

Knihovna je licencovaná pod Eclipse Public License.

Obsah

Historie

AWT (Abstract Window Toolkit) byla první Java GUI knihovna představená v JDK 1.0, jako jedna z komponent Sun Microsystems Java platformy. Původní AWT byl jednoduchý Java wrapper okolo systémem poskytovaných ovládacích prvků (widgetů) jako menu, okna a tlačítka.

Swing byla knihovna další generace GUI toolkitu představená společností Sun v J2SE 1.2. Swing knihovna byla vyvinuta s cílem poskytnout bohatší sadu komponent než AWT. Swingové GUI prvky jsou 100% Java bez jakéhokoli nativního kódu: místo toho, aby obalovaly nativní GUI komponenty, Swing je kreslí sám, kdy pomocí Java2D volá low level operating system drawing routines.

Kořeny SWT směřují zpátky k práci kterou udělala společnost Object Technology International, dále OTI, když v roce 1990 vytvářela multiplatformní, přenositelné, nativní widgetové rozhraní pro Smalltalk (původně OTI Smalltalk, který se v roce v roce 1993 stal IBM Smalltalkem). CW (Common Widget) vrstva IBM Smalltalku poskytovala rychlý, nativní přístup k mnoha sadám ovladacích prvků na různých platformách avšak společné API nabídla bez tzv. problému "nejmenšiho společného jmenovatele" kterým trpěly ostatní přenositelné GUI toolkity. IBM v té době vyvíjela vývojové prostředí VisualAge které bylo psané ve Smaltalku. Svůj kód se rozhodli uvolnit pro open-source komunitu což vedlo k vývoji Eclipse, který se měl stát novým konkurentem pro ostatní vývojová prostředí jako je Microsoft Visual Studio. Eclipse se vyvíjel v Javě a IBM vývojáři při potřebě toolkitu který by měl "nativní look and feel" a "nativní výkon", vytvořili SWT jako náhradu za Swing [1].

Návrh

SWT je obálkou okolo nativních objektů - GTK+ objektů, Win32 objektů atd. Z tohoto důvodu jsou SWT widgety často označovány jako "heavyweight" (pod lehkou obálkou se skrývají těžké nativní objekty). V případech kdy nativní GUI knihovny neposkytují požadovanou funkčnost pro SWT, SWT tuto funkčnost implementuje sám, obdobně jak to dělá Swing. V podstatě lze říci že SWT je jakýmsi kompromisem mezi vzhledem a nízkým výkonem z AWT a vysokou úrovní snadnosti používání ze Swingu.[2] [3].

Podle Eclipse Foundation, "SWT a Swing jsou různé nástroje vytvořené s různými cíli. Cílem SWT je poskytovat API pro přístup k nativním grafickým prvkům napříč širokým spektrem platforem. Hlavními cíli návrhu jsou: velká rychlost, nativní vzhled a hluboká platformní integrace. Swing je naproti tomu navržen tak aby umožňoval vysoce přizpůsobitelný vzhled který je pak stejný na všech platformách."[4]

SWT je relativně jednodušší než Swing, bez "nepotřebných" (pro průměrného vývojáře) nadstandardních funkcí.[5] To však vede k argumentaci, že SWT oproti Swingu některou funkčnost postrádá.[6]

Přestože SWT neimplementuje populární Model-View-Controller architekturu používanou ve Swingu a v mnoho dalších GUI toolkitech, JFace knihovna, která je vyvíjena v rámci stejného projektu Eclipse, představuje implementaci Model-View-Controlleru s vysokou úrovní abstrakce, jako nadstavbu SWT. Vývojáři se mohou rozhodnout pro použití JFace kvůli pružnějším a abstraktnějším datovým modelům pro komplexní SWT prvky, jako jsou stromy, tabulky a seznamy, nebo mohou přistupovat k těmto prvkům přímo podle potřeby.

Výkon

SWT bylo navrženo tak aby bylo velmi výkonné; rychlejší, lehčí a s lepší schopností využití systémových prostředků, než Swing.[7] Byly zde určité pokusy srovnat SWT se Swingem pomocí různých výkonnostních testů (benchmarků), které dávaly za pravdu že SWT je rychlejší, ačkoliv tyto testy nebyly dostatečně komplexní na to dospět k rozhodujícímu závěru.[8]. Další "real-life" testy ale neurčily jasného vítěze, a spíše prokázaly na to, že výsledky silně závisí na kontextu a prostředí aplikace[9].

Vzhled

Protože SWT používá k vykreslování nativní systémové knihovny, jeho prvky mají stejný "look and feel" jako nativní grafické prvky tohoto sytému.

Vzhledem k architektuře "obálky", SWT na rozdíl od Swingu nevyžaduje při malý změnách v nativních GUI knihovnách aktualizaci v aplikacích, kde je použit. Jinak řečeno, při menší aktualizaci vzhledu nebo chování nativních knihoven v operačním systému se toto ihned projeví i v programu napsaném v SWT. Naopak je tomu u Swingu, kdy s každou změnou operačního systému se musí aktualizovat Swing knihovna aby začala "napodobovat" nové chování.

Příklad

Výsledek v prostředí GTK+

Jednoduchý program Hello World používající SWT. Zobrazuje okno (Shell) a popisek (Label).

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
 
public class HelloWorld {
   public static void main (String[] args) {
      Display display = new Display();
      Shell shell = new Shell(display);
      Label label = new Label(shell, SWT.NONE);
      label.setText("Hello World");
      label.pack();
      shell.pack();
      shell.open();
      while (!shell.isDisposed()) {
          if (!display.readAndDispatch ()) display.sleep (); 
      } 
      display.dispose ();
   }
}

Na rozdíl od Swingu, Display třída přistupuje k vrstvě operačního systému, a její zdroje musí být explicitně uvolněny ve chvíli kdy se už nevyužívají.

Podporované platformy

SWT musí být portován pro každou nově vytořenou systémovou GUI knihovnu (platformu). To znamená že narozdíl od Swingu a AWT, SWT není podporovan na všech platformách které podporuje Java. SWT není součástí Java release. K dispozici je také několik důkazů o tom, že výkon SWT na jiných platformách než Windows, je výrazně méně efektivní. Protože SWT používá různé nativní knihovny na specifické platformě, mohou být vývojáři SWT vystaveni specifickým bugům pro tuto platformu.

SWT je "odkryt" vývojáři na mnohém nižší úrovni než Swing. Je to důvodem toho že SWT je technicky pouze vrstva nad nativními knihovnami operačních systému poskytujících GUI funkcionalitu.

Vzhledem k tomu že SWT implementace je unikátní pro danou platformu, musí být SWT (JAR soubor) distribuován pro každou platformu zvlášť.

K červenci 2008 SWT podporuje následující platformy a / nebo GUI knihovny:

Aplikace

Příklad aplikací používajících SWT:

Reference

  1. FAQ: Why does Eclipse use SWT? [online]. [cit. 2009-01-06]. Dostupné online. (angličtina) 
  2. Steve Northover. SWT: Implementation Strategy for Java Natives [online]. [cit. 2001-03-22]. Dostupné online. (angličtina) 
  3. Carolyn MacLeod and Steve Northover. SWT: Managing Operating System Resources [online]. [cit. 2001-11-27]. Dostupné online. (angličtina) 
  4. FAQ: Is SWT better than Swing? [online]. [cit. 2008-02-16]. Dostupné online. (angličtina) 
  5. Ella Morton. James Gosling Q & A [online]. [cit. 2007-03-24]. Dostupné online. (angličtina) 
  6. Performance Benchmarks of Nine Languages [online]. [cit. 2007-03-24]. Dostupné online. (angličtina) 
  7. Why I choose SWT against Swing [online]. November 19 2004, [cit. 2006-11-07]. Dostupné online. (angličtina) 
  8. Swing vs. SWT Performance - Have a Look at the Call Stacks
  9. SWT Vs. Swing Performance Comparison [PDF]. cosylab.com, 2005-05-10, [cit. 2008-05-24]. Dostupné online. (angličtina) 

Externí odkazy