====== 6. Cvičení ======
Na tomto cvičení se naučíte vytvořit okno s grafickými prvky. Naučíte se vytvářet a umísťovat grafické prvky pomocí Layout Managerů. Během tohoto cvičení nepoužívejte žádný designer z vývojového prostředí.
===== Úkoly na cvičení =====
==== GUI ====
- Projděte si příklady na základní použití GUI.
- Seznamte se s Layout Managery
- Vytvořte GUI pro **jednoduchý čítač** s funkcemi plus jedna, reset a konec. Použijte JLabely a JButtony a vhodné layout managery.
- Zajistěte spuštění Vašeho okna v samostatném vlákně.
- Doplňte obsluhy tlačítek pomocí všech přístupů z následující sekce. S cvičícím porovnejte výhody a nevýhody jednotlivých přístupů.
- Doplňte obsluhu události, kdy se odpočet čítače dostane na nulu. V ten okamžik se zobrazí dialogové okno, ve kterém bude mít uživatel možnost nastavit novou počáteční hodnotu čítače.
V úlohách na cvičení **je zakázáno** používat layouty určené zejména pro volné pozicování v grafických designérech GUI,\\
např. **GroupLayout, AbsoluteLayout, null** (bez použití layout manažeru) apod.
Většinu rozložení prvků lze dosáhnout kombinací\\
**FlowLayout, BorderLayout,** příp. **GridLayout**.
==== Zpracování událostí ====
Vytvořte a vzájemně porovnejte obsluhy události stisku tlačítek (proč je lepší obsluha ActionPerformed než kliknutí myši?) a to pomocí:
- speciální třídy deklarované jako public (ve svém souboru), tzv. handler události,
- handleru deklarovaného v souboru popisujícím okno,
- vnitřní třídy,
- anonymní vnitřní třídy,
- implementace rozhraní ActionListener přímo třídou reprezentující okno.
Při porovnání zohledněte tato kritéria:
- možnost použití stejné obsluhy pro více tlačítek ležících v jednom okně (tedy něco jako pexeso) či v několika různých oknech. Příkladem může být požadavek na ukončení aplikace vyvolaný z různých míst programu a vyžadující kontrolu uložení dat. (V této souvislosti je možné zmínit správné řešení tohoto problému pomocí akcí - Action, nicméně v této fázi seznamování s událostmi je ještě příliš vzdálený),
- možnost přímého přístupu k položkám třídy (u nás popisek zobrazující počet kliknutí na tlačítko),
- možnost předání nějakých parametrů konstruktoru obslužné třídy, např. odkaz na okno,
- možnost různých metod pro více tlačítek na jednom okně.
Spouštění JFrame ve vlastním vlákně:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Citac citac = new Citac("MyCitac");
citac.setVisible(true);
}
});
}
===== Studijní materiály =====
[[courses:b0b36pjv:tutorials:06:layoutmanagery|Layout managery]]
{{:courses:b0b36pjv:tutorials:06:pjv06.zip|Demo aplikace na GUI}}
{{:courses:b0b36pjv:tutorials:06:pjv_gui.zip|Demo aplikace na GUI v Mavenu}}
[[https://docs.oracle.com/javase/tutorial/uiswing/]]
----
[[courses:b0b36pjv:tutorials:06:javafx|Začínáme s JavaFX]]
[[courses:b0b36pjv:tutorials:06:javafx_gui|GUI v JavaFX]]