====== 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ě. ===== 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/]]