Warning
This page is located in archive.

5 - Grafické uživatelské rozhraní, zpracování událostí

  • pro vyučující: 05

Náplň cvičení

GUI

Stáhněte si a rozbalte následující projekt: GUI

  1. Projděte si příklady na základní použití GUI.
  2. Seznamte se s layout managery.
Úkol:
Vytvořte GUI pro jednoduchý čítač s funkcemi plus jedna, reset a konec. Použijte JLabely a JButtony.
V úlohách na cvičení a zejména v semestrální práci je zakázáno používat layouty určené zejména pro volné pozicování v gragický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 jednoduché okno s jedním tlačítkem a jedním popiskem pro zobrazení počtu kliknutí na tlačítko. Vytvořte a vzájemně porovnejte obsluhy události stisku tlačítka (proč je lepší obsluha ActionPerformed než kliknutí myši?) a to pomocí:

  1. speciální třídy deklarované jako public (ve svém souboru), tzv. handler události,
  2. handleru deklarovaného v souboru popisujícím okno,
  3. vnitřní třídy,
  4. anonymní vnitřní třídy,
  5. implementace rozhraní ActionListener přímo třídou reprezentující okno.

Při porovnání zohledněte tato kritéria:

  1. 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ý),
  2. 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),
  3. možnost předání nějakých parametrů konstruktoru obslužné třídy, např. odkaz na okno,
  4. možnost různých metod pro více tlačítek na jednom okně.

Ukázka jednotlivých způsobů zpracování událostí.

Úkol:
Dodělejte funkčnost čítače pomocí zpracování událostí tlačítek.

Další úlohy

Telefonní seznam

Vytvořte uživatelské rozhraní pro aplikaci “Telefonní seznam”. Datovou část aplikace si stahněte zde.

  • Hlavní okno bude ukazovat výpis položky telefonního seznamu. Implementujte výpis položky jako panel, který bude možné použít i v jiné části programu.
  • Pro posun mezi položkami vytvořte tlačítka “Předchozí” a “Další”. Na začátku zneplatněte posun vlevo, na konci seznamu zneplatněte posun vpravo.
  • Vytvořte modální dialog pro vkládání položek. Toto okno se zobrazí po stisku tlačítka “Přidej”.
  • Nezapomeňte ošetřit všechny výjimky a informovat o chybě uživatele (JOptionPane.show…)

Možná rozšíření

  • V hlavním okně zobrazte počet všech položek a pořadí zobrazené položky.
  • Vytvořte okno pro vyhledávání položek.

Řešení: Telefonní seznam

Adresář

Rozšiřte položku telefonního seznamu o adresu osoby, případně další informace. Vytvořte aplikaci pro Adresář, kde hlavní okno bude rozděleno na dvě části, vrchní bude ukazovat tabulkový pohled na položky seznamu, spodní strana bude obsahovat pohled na právě zobrazenou položku.

Úroková kalkulačka

  • Vytvořte program pro počítání úroků. Výstupem bude celková částka. Vstupem budou
    1. vklad,
    2. úroková míra,
    3. počet let.

Dělová koule

  • Vytvořte aplet, který bude simulovat výstřel z dělové koule.
  • Parametry budou náklon děla (použijte JSpinner) a rychlost výstřelu.

Nápověda: pohyb koule rozdělte na dva směry, jeden je x a druhý y. V každém kroku se koule posune o dx a dy, přičemž dx je konstantní (zanedbáváme odpor vzduchu) a dy se vždy sníží o konstantu (opět uvažujeme pouze vliv gravitace). Pro vykreslení použijte zastínění metody paint.

Layout managery v Javě

FlowLayout

flow layout

Zřejmě nejjednodušší layout manager. Komponenty rozmísťuje v pořadí, v jakém jsme je vložili do řádky. Výška řádky je odvozena od nejvyšší komponenty.

BorderLayout

border layout

Tento layout manager je schopný umístit pouze pět komponent Tentokrát však umístění nezáleží na pořadí, v jakém jsme komponenty vkládali, ale používá svůj způsob “světových stran”. K dispozici je pět konstant NORTH, SOUTH, WEST, EAST a CENTER. Vkládané komponenty zvětší tak, že severní a jižní komponentu roztáhne na maximální šířku(výšku však ponechá nezměněnou). Západní a východní komponenty roztáhne do výšky, ale nezmění jejich šířku a zbylý prostor “uprostřed” vyplní poslední komponentou. Mezeru mezi komponenty můžeme určit hned na začátku, neboť konstruktor vypadá takto: BorderLayout(int horizontalnimezera, int vertikalnimezerea).

Grid Layout

grid layout

Velmi jednoduchý layout manager, který naše komponenty rozmísťuje do předdefinované mřížky. Na další řádek přejde pouze v případě, že jsme vyplnili všechny sloupce na řádku předchozím.

Card Layout

card layout card layout

Velmi zvláštní layout manager. Má komponenty uspořádané do bloků a vždy je viditelný pouze jeden z nich. Velmi se podobá tzv, kartám(záložkám) použité ve složitých dialogových boxech.

GridBag Layout

gridbag layout

Tento manager využívá tzv. strukturu tabulky, kde každá komponenta může zabírat i několik řádek a sloupců. Dále obsahuje možnost roztažení vybraných řádek a sloupců, pokud tak neučiníme, je tu také možnost nastavit pro každou komponentu její velikost, okraje, roztažitelnost a umístění v rámci. S tímto layout managerem bývají největší problémy. Vhodnější je použít techniku kombinování několika panelů s využitím různých layout managerů.

courses/a0b36pr2/labs/lab05.txt · Last modified: 2016/03/24 12:08 by mudromar