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.
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);
}
});
}