Standard Widget Toolkit

Standard Widget Toolkit
Ukázka vzhledu GUI prvků pod Mac OS
Ukázka vzhledu GUI prvků pod Mac OS
VývojářFree software community
Aktuální verze4.2.2 (6. února 2013)
Operační systémmultiplatformní
PlatformaJava Virtual Machine
Vyvíjeno vJava
Typ softwaruknihovna ovládacích prvků pro platformu Java
LicenceEclipse Public License
Webhttp://www.eclipse.org/swt/
Některá data mohou pocházet z datové položky.

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.

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á nízkoúrovňové rozhraní operačního systému pro kreslení.

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 ovládacích prvků na různých platformách avšak společné API nabídla bez tzv. problému "nejmenšího 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

Vzhled GUI prvku v operačním systému Linux

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ě, jako 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 systé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

Azureus BitTorrent klient v prostředí GTK+

SWT musí být portován pro každou nově vytvořenou systémovou GUI knihovnu (platformu). To znamená že na rozdíl od Swingu a AWT, SWT není podporován 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:

Odkazy

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é v archivu pořízeném dne 2006-08-30. (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]. 2004-11-19 [cit. 2006-11-07]. Dostupné v archivu pořízeném dne 2006-12-31. (angličtina) 
  8. STRENN, Stephen. Swing vs. SWT Performance - Have a Look at the Call Stacks [online]. 2006-03-03 [cit. 2014-02-06]. Dostupné v archivu pořízeném dne 2017-01-10. (anglicky) 
  9. SWT Vs. Swing Performance Comparison [PDF]. cosylab.com, 2005-05-10 [cit. 2008-05-24]. Dostupné v archivu pořízeném dne 2008-07-04. (angličtina) 

Související články

Externí odkazy