<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Swing_%28Java%29</id>
		<title>Swing (Java) - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Swing_%28Java%29"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Swing_(Java)&amp;action=history"/>
		<updated>2026-06-21T09:22:28Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Swing_(Java)&amp;diff=394018&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Swing_(Java)&amp;diff=394018&amp;oldid=prev"/>
				<updated>2013-10-31T21:32:35Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 31. 10. 2013, 21:32&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Swing_(Java)&amp;diff=394017&amp;oldid=prev</id>
		<title>Sysop: Nahrazení textu</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Swing_(Java)&amp;diff=394017&amp;oldid=prev"/>
				<updated>2011-10-29T14:04:33Z</updated>
		
		<summary type="html">&lt;p&gt;Nahrazení textu&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Swing''' je [[knihovna (programování)|knihovna]] uživatelských prvků na platformě [[Java (programovací jazyk)|Java]] pro ovládání počítače pomocí [[GUI|grafického rozhraní]]. Knihovna Swing poskytuje [[API|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…&lt;br /&gt;
&lt;br /&gt;
== Historie ==&lt;br /&gt;
Pů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 [[platforma (informatika)|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.&lt;br /&gt;
&lt;br /&gt;
Jako základ sloužily [[IFC|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 [[JFC|Java Foundation Classes (JFC)]], jehož je Swing součástí.&lt;br /&gt;
&lt;br /&gt;
Swing je vyvíjen jako kombinace AWT, IFC a dalších technologií.&lt;br /&gt;
&lt;br /&gt;
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í.&lt;br /&gt;
&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Swing_(Java)#History&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hierarchie ==&lt;br /&gt;
[[Soubor:AWTSwingClassHierarchy.png|thumb|Hierarchie tříd]]&lt;br /&gt;
&lt;br /&gt;
[[Hierarchie]] tříd grafických komponent Swingu je založena na rodičích z AWT, jak ilustruje obrázek napravo.&lt;br /&gt;
&lt;br /&gt;
Jako každá třída v Javě, i [[třída (programování|třídy]] grafického uživatelského rozhraní jsou potomky třídy &amp;lt;code&amp;gt;Object&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Základním stavebním kamenem všech grafických komponent je třída &amp;lt;code&amp;gt;Component&amp;lt;/code&amp;gt;. Instance třídy &amp;lt;code&amp;gt;Component&amp;lt;/code&amp;gt; představují objekty, které mají svoji grafickou reprezentaci a mohou být zobrazeny na monitoru a interagovat s uživatelem. Všechno, co Java na monitoru nakreslí, je instance třídy &amp;lt;code&amp;gt;Component&amp;lt;/code&amp;gt;. Různé [[ovládací prvek (počítač)|ovládací prvky]] (tlačítko, zašktávátko, seznam, atd…) v AWT jsou definovány jako potomci třídy &amp;lt;code&amp;gt;Component&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Od třídy &amp;lt;code&amp;gt;Component&amp;lt;/code&amp;gt; je dále [[Objektově_orientované_programování#D.C4.9Bdi.C4.8Dnost|odvozena]] třída &amp;lt;code&amp;gt;Container&amp;lt;/code&amp;gt; (kontejner). Kontejner je taková grafická komponenta, která v sobě může držet a kreslit ostatní grafické komponenty. Jakým způsobem se komponenty v kontejneru nakreslí, určuje tzv. [[správce rozložení (Java)|správce rozložení]] (implementace rozhraní &amp;lt;code&amp;gt;LayoutManager&amp;lt;/code&amp;gt;). V AWT jsou od třídy &amp;lt;code&amp;gt;Container&amp;lt;/code&amp;gt; odvozeny různé prvky, např. třída &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; nebo &amp;lt;code&amp;gt;Panel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Základním kamenem knihovny Swing je třída &amp;lt;code&amp;gt;JComponent&amp;lt;/code&amp;gt;. Tato třída je [[Objektově_orientované_programování#D.C4.9Bdi.C4.8Dnost|rodičem]] každé swingovské komponenty. Jak je patrno z obrázku, &amp;lt;code&amp;gt;JComponent&amp;lt;/code&amp;gt; je potomkem &amp;lt;code&amp;gt;Container&amp;lt;/code&amp;gt;. Tudíž všechny swingovské prvky v sobě mohou držet další komponenty. Potomci třídy &amp;lt;code&amp;gt;JComponent&amp;lt;/code&amp;gt; jsou samotné swingovské komponenty, jako je &amp;lt;code&amp;gt;JButton&amp;lt;/code&amp;gt; (tlačítko), &amp;lt;code&amp;gt;JList&amp;lt;/code&amp;gt; (seznam), &amp;lt;code&amp;gt;JPanel&amp;lt;/code&amp;gt; (obecný panel), atd… Všechny swingovské komponenty mají před svým logickým názvem písmeno J, aby byly rozlišitelné od svých protějšků z AWT.&lt;br /&gt;
&lt;br /&gt;
K této obecné hierarchii existují výjimky, a to jsou [[okno (počítačové)|okna]] a obecně všechny nejvyšší kontejnery (top-level containers – [[okno (počítačové)|okna]], [[dialogová okna|dialogy]], [[applet]]y). Okna jsou obecně potomci třídy &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt;, a nemohou proto být potomci třídy &amp;lt;code&amp;gt;JComponent&amp;lt;/code&amp;gt; (v Javě nelze dědit od více tříd). Swingovské protějšky k &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; a jeho potomků (&amp;lt;code&amp;gt;Frame&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Dialog&amp;lt;/code&amp;gt;, atd…) jsou definovány jako potomci těchto tříd s „J“ na začátku. Tj. hlavní swingovské okno &amp;lt;code&amp;gt;JFrame&amp;lt;/code&amp;gt; je definováno jako potomek &amp;lt;code&amp;gt;Frame&amp;lt;/code&amp;gt;.&amp;lt;ref name=&amp;quot;API&amp;quot;&amp;gt;http://java.sun.com/javase/6/docs/api/javax/swing/package-summary.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Těžké a lehké komponenty ==&lt;br /&gt;
AWT bylo koncipováno jako [[rozhraní]] mezi Javou a grafickým [[API]] [[platforma|platformy]]. Tj. všechny grafické komponenty byly přímo kresleny [[operační systém|systémem]] a měly tedy nativní vzezření. Např. [[Java Virtual Machine|JVM]] na [[Windows]] využívala [[Windows API|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í).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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 [[optimalizace (informatika)|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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&amp;lt;ref&amp;gt;http://java.sun.com/products/jfc/tsc/articles/painting/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Konfigurovatelný vzhled ==&lt;br /&gt;
Protož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“).&lt;br /&gt;
&lt;br /&gt;
Look and Feel je sada [[delegace (programování)|delegátů]], které určují, jak bude která komponenta vypadat. Např. pro tlačítko (&amp;lt;code&amp;gt;JButton&amp;lt;/code&amp;gt;) je to třída &amp;lt;code&amp;gt;ButtonUI&amp;lt;/code&amp;gt;. Vždy, když se má komponenta namalovat, tak se zeptá vhodného delegáta, jak má v tomto [[Look and Feel]] vypadat, a namaluje se podle toho.&lt;br /&gt;
&lt;br /&gt;
Look and Feel je dokonce vyměnitelný za chodu, tudíž je možné během chodu [[počítačový program|programu]] kompletně změnit to, jak program vypadá, protože se pouze změní třída zodpovědná za poskytování informací o vzhledu.&lt;br /&gt;
&lt;br /&gt;
Defaultní Look and Feel je [[platforma (informatika)|platformě]] 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ě.&lt;br /&gt;
&lt;br /&gt;
Na [[Internet]]u 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.&lt;br /&gt;
&lt;br /&gt;
Tato architektura vyměňování Look and Feel je blízká [[návrhový vzor|návrhovému vzoru]] [[Abstraktní továrna]].&amp;lt;ref name=&amp;quot;API&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Architektura MVC ==&lt;br /&gt;
[[MVC|Model – 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.&lt;br /&gt;
&lt;br /&gt;
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 [[defaultní]] [[implementace|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.&lt;br /&gt;
&lt;br /&gt;
Například &amp;lt;code&amp;gt;JList&amp;lt;/code&amp;gt; (seznam) má definovaný model pomocí rozhraní &amp;lt;code&amp;gt;ListModel&amp;lt;/code&amp;gt;. Protože rozhraní je definované pro danou komponentu, &amp;lt;code&amp;gt;ListModel&amp;lt;/code&amp;gt; poskytuje metody pouze pro čtení dat (to je vše, co &amp;lt;code&amp;gt;JList&amp;lt;/code&amp;gt; potřebuje k vykreslení prvků). Defaultní implementace &amp;lt;code&amp;gt;ListModel&amp;lt;/code&amp;gt;u je &amp;lt;code&amp;gt;DefaultListModel&amp;lt;/code&amp;gt;, který přidávání a odebírání prků ze seznamu již podporuje. Obecně &amp;lt;code&amp;gt;ListModel&amp;lt;/code&amp;gt; představuje jednorozměrné pole prvků, ale programátor může dané rozhraní implementovat podle svých potřeb.&lt;br /&gt;
&lt;br /&gt;
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ý vzor|návrhovém vzoru]] [[Observer]].&lt;br /&gt;
&lt;br /&gt;
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 [[implementace|implementuje]] rozhraní &amp;lt;code&amp;gt;ActionListener&amp;lt;/code&amp;gt;. Po zaregistrování se k tlačítku bude daný objekt dostávat zprávy o mačkání tlačítka prostřednictvím metod definovaných v rozhraní &amp;lt;code&amp;gt;ActionListener&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Jiné komponenty mohou definovat více událostí – např. strom (&amp;lt;code&amp;gt;JTree&amp;lt;/code&amp;gt;) vyvolává události při rozbalení položky a při vybrání položky. Dále obecně všechny komponenty (protože jsou potomky různých tříd v komponentní hierarchii), definují další události – při změně vlastníka, při změně vlastnosti (property), při změně kontejneru, při klepnutí [[počítačová myš|myší]], při psaní textu, při změně zaměření (focus), atd…&amp;lt;ref name=&amp;quot;API&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Další vlastnosti ==&lt;br /&gt;
=== Přístupnost (Accessibility) ===&lt;br /&gt;
Swing poskytuje možnost [[implementace]] přídavných technologií pro asistenci [[tělesné postižení|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á zkratka|klávesových zkratek]] tlačítkům, nebo přeskakování mezi prvky formuláře pomocí tabulátoru.&lt;br /&gt;
&lt;br /&gt;
Ostatní lze dodefinovat tím, že se implementuje rozhraní &amp;lt;code&amp;gt;Accessible&amp;lt;/code&amp;gt; a poskytne [[instance (programování)|instanci]] třídy &amp;lt;code&amp;gt;AccessibleContext&amp;lt;/code&amp;gt;. Různé podpůrné technologie využívají toto API pro svou funkčnost.&amp;lt;ref&amp;gt;http://java.sun.com/docs/books/tutorial/uiswing/misc/access.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Serializovatelnost (Serializability) ===&lt;br /&gt;
Všechny komponenty grafického rozhraní jsou [[serializace|serializovatelné]].&lt;br /&gt;
&lt;br /&gt;
=== Více [[vlákno (program)|vláken]] (Multi-threading) ===&lt;br /&gt;
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 [[architektura (software)|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ě.&amp;lt;ref&amp;gt;http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
Tento kousek kódu zobrazí text Hello World v okně:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
&lt;br /&gt;
public class HelloWorld&lt;br /&gt;
{&lt;br /&gt;
public static void main(String[] args){&lt;br /&gt;
//vytvoříme okno&lt;br /&gt;
JFrame frame = new JFrame(&amp;quot;Hello World example&amp;quot;);&lt;br /&gt;
//do okna přidáme text&lt;br /&gt;
frame.add(new JLabel(&amp;quot;Hello World!&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
// okno zmenšíme do takové velikosti, aby bylo velké tak, jak je potřeba&lt;br /&gt;
frame.pack();&lt;br /&gt;
// nastavíme, že po zavření okna dojde k ukončení programu&lt;br /&gt;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
//vycentrujeme okno dopostřed obrazovky&lt;br /&gt;
frame.setLocationRelativeTo(null);&lt;br /&gt;
&lt;br /&gt;
// okno zobrazíme&lt;br /&gt;
frame.setVisible(true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}}&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>