Swing (Java)![]() Swing je knihovna uživatelských prvků na platformě Java pro ovládání počítače pomocí grafického rozhraní. Knihovna Swing poskytuje aplikační rozhraní pro tvorbu a obsluhu klasického grafického uživatelského rozhraní. Pomocí Swingu je možno vytvářet okna, dialogy, tlačítka, rámečky, rozbalovací seznamy atd. HistoriePůvodní nástroj pro tvorbu grafického uživatelského rozhraní je Abstract Window Toolkit (AWT), vyvíjený firmou Sun Microsystems jako součást Javy. První verze vyšla v roce 1995, spolu s první verzí jazyka Java. Během dalšího vývoje se ale u AWT projevily chyby v návrhu a další problémy. Např. bylo závislé na platformě a tím porušovalo jeden z principů, na kterém je jazyk Java postaven. V roce 1997 Sun upustil od dalšího vývoje AWT a začal vyvíjet Swing. Jako základ sloužily Internet Foundation Classes (IFC), vyvinuté Netscape Communications Corporation na konci roku 1996, jako nástroj pro tvorbu grafického uživatelského rozhraní pro Javu. V roce 1997 došlo ke spojení IFC a dalších technologií od Netscape a Sun Microsystems do Java Foundation Classes (JFC), jehož je Swing součástí. Swing je vyvíjen jako kombinace AWT, IFC a dalších technologií. Swing je nedílnou součástí Java SE od verze 1.2. Do té doby byl dostupný pouze jako knihovna k samostatnému stažení. Hierarchie![]() Hierarchie tříd grafických komponent Swingu je založena na rodičích z AWT, jak ilustruje obrázek napravo. Jako každá třída v Javě, i třídy grafického uživatelského rozhraní jsou potomky třídy Základním stavebním kamenem všech grafických komponent je třída Od třídy Základním kamenem knihovny Swing je třída K této obecné hierarchii existují výjimky, a to jsou okna a obecně všechny nejvyšší kontejnery (top-level containers – okna, dialogy, applety). Okna jsou obecně potomci třídy Těžké a lehké komponentyAWT bylo koncipováno jako rozhraní mezi Javou a grafickým API platformy. Tj. všechny grafické komponenty byly přímo kresleny systémem a měly tedy nativní vzezření. Např. JVM na Windows využívala Win32 API (konkrétně knihovny gdi32.dll a další) ke kreslení AWT komponent. Tyto nativně vykreslené prvky se nazývají „těžké“ (v originále heavyweight), protože měly své vlastní nativní neprůhledné okno v systému. Na systém se spoléhaly i v dalších věcech, např. zajišťování pozice na ose Z (která komponenta je v popředí a která v pozadí). Swing přináší jiný přístup, a to ten, že každá komponenta je sama zodpovědná za svůj vlastní vzhled a nespoléhá se na systém. Každá komponenta sama definuje, jak vypadá, a na požádání se namaluje na monitor. Samotné kreslení se odehrává přímo v Javě, a operačnímu systému se pouze předá hotový obrázek k namalování. Tomuto přístupu se říká „lehký“ (lightweight). To, jak komponenty budou vypadat, již tedy nezáleží na operačním systému. Swing navíc přidává podporu pro dvojitou vyrovnávací paměť (double buffering), která umožňuje plynulé kreslení grafických prvků; pro podporu průhlednosti a částečné průhlednosti; pro optimalizované kreslení v případě překrývajících se komponent; a další technologie. Pro kreslení využívá další část JFC, a to Java 2D API. Kreslení nejvyšších kontejnerů (oken, dialogů…) je ve Swingu převzato z AWT, tudíž okna jako taková jsou platformě závislá (nelze mít okno na platformě, která okna nepodporuje). Jejich vzhled ale konfigurovatelný je.[2] Konfigurovatelný vzhledProtože operační systém již ve Swingu nemá kontrolu nad tím, jak bude komponenta vypadat, je možné ve Swingu změnit vzhled, chování a některé další charakteristiky všech komponent pomocí tzv. Look and Feel („Vzhled a Pocit“). Look and Feel je sada delegátů, které určují, jak bude která komponenta vypadat. Např. pro tlačítko ( Look and Feel je dokonce vyměnitelný za chodu, tudíž je možné během chodu programu kompletně změnit to, jak program vypadá, protože se pouze změní třída zodpovědná za poskytování informací o vzhledu. Implicitní Look and Feel je platformně nezávislý a vypadá stejně na všech platformách. Swing dále poskytuje různé Look and Feel pro všechny hlavní platformy, a lze nastavit, aby zavedl takové Look and Feel, které bylo naprogramováno na nativní vzhled na dané platformě. Na Internetu se nachází ke stažení mnoho dalších verzí Look and Feel třetích stran, a je samozřejmě možné si nadefinovat vlastní Look and Feel. Tato architektura vyměňování Look and Feel je blízká návrhovému vzoru Abstraktní továrna.[1]
Architektura MVCModel – View – Controller (MVC) je typ softwarové architektury, kde je uživatelské rozhraní (View) odděleno od logiky programu (Model) řídící logikou (Controller). Tyto tři komponenty bývají často odděleny rozhraními, a tak modifikace jedné části má minimální vliv na ostatní části.
Ve Swingu má každý grafický objekt (tlačítko, seznam, rozbalovací menu…) svůj model v podobě rozhraní, který je na daném grafickém objektu nezávislý. Swing poskytuje implicitní implementaci modelu pro běžné využití, ale nic uživateli nebrání, aby si naprogramovat objekt s jiným modelem. Toto umožňuje uživateli změnit chování grafické komponenty, ale využívat její vzhled. Například Model dále nabízí rozhraní pro komunikaci se zbytkem programu pomocí vyvolávání událostí. Ve zkratce, komponenta nabízí, že si k ní kdokoliv může přihlásit posluchače (tzv. listener) na různé události. Listener je pro danou komponentu definován obvykle jako nějaké rozhraní. Když v komponentě proběhne daná události (ať už ji vyvolal kdokoliv) – např. zmáčknutí tlačítka, vybrání položky, minimalizování okna, atd…, komponenta všem přihlášeným posluchačům odešle zprávu o provedené akci. Tato technologie přihlašování a odesílání zpráv je založena na návrhovém vzoru Observer. Např. tlačítko vyvolává jedinou událost – obecnou akci, která nastane při zmáčknutí tlačítka. Kdokoliv se může stát posluchačem mačkání tlačítka tím, že implementuje rozhraní Jiné komponenty mohou definovat více událostí – např. strom ( Další vlastnostiPřístupnost (Accessibility)Swing poskytuje možnost implementace přídavných technologií pro asistenci tělesně postižených lidí při práci s počítačem. Některé z nich jsou implementovány přímo ve Swingu, jako např. možnost přiřazení klávesových zkratek tlačítkům, nebo přeskakování mezi prvky formuláře pomocí tabulátoru. Ostatní lze dodefinovat tím, že se implementuje rozhraní Serializovatelnost (Serializability)Všechny komponenty grafického rozhraní jsou serializovatelné. Více vláken (Multi-threading)Ačkoliv samotný Swing nepoužívá pro svůj běh více vláken a není navržen pro používání vláken (není vláknově bezpečné – thread safe), podporuje více vláken svou architekturou. Např. poskytuje vlákno, které se nazývá Event dispatch thread, které je mimo jiné zodpovědné za spouštění dalších vláken, když nějaký prvek spustí nějakou událost. Je možné tedy oddálit spuštění události, popřípadě volat logiku programu v samostatném vlákně.[4] PříkladTento výňatek z kódu zobrazí text „Hello World!“ v okně: import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloWorld {
public static void main(String[] args){
// vytvoříme okno
JFrame frame = new JFrame("Hello World example");
// do okna přidáme text
frame.add(new JLabel("Hello World!"));
// okno zvětšíme do takové velikosti, aby se do něj vešly všechny komponenty
frame.pack();
// nastavíme, že po zavření okna dojde k ukončení programu
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// vycentrujeme okno doprostřed obrazovky
frame.setLocationRelativeTo(null);
// okno zobrazíme
frame.setVisible(true);
}
}
ReferenceV tomto článku byl použit překlad textu z článku Swing (Java) na anglické Wikipedii.
Externí odkazy
|
Portal di Ensiklopedia Dunia