IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - Upomínač narozenin v JavaFX - Návrh formuláře

V předešlém cvičení, Řešené úlohy k 1.-3. lekci JavaFX, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V dnešním tutoriálu započneme tvorbu složitější JavaFX aplikace, která bude sloužit k upomínání narozenin přátel.

Návrh formuláře

Začneme tradičně s návrhem formuláře. Pořádně si u toho zaklikáme, a proto jsem se snažil do článku vložit co nejvíce obrázků, abyste si mohli kontrolovat, že postupujete správně. Vysvětleme si však nejprve absolutní a relativní pozicování.

Absolutní pozicování

V minulé aplikaci jsme si formulář naklikali tak, jak nás to napadlo. Jednotlivé komponenty jsme umístili přesně na určitou pozici na formuláři. Tomuto přístupu se říká absolutní pozicování. Jeho nevýhodou je, že aplikace poté nereaguje na rozšíření okna. Drtivá většina aplikací má proto komponenty na formuláři pozicované relativně.

Relativní pozicování

Pokud má komponenta relativní pozici, znamená to, že se tato pozice vztahuje k nějaké jiné komponentě, ve které je vložena. Nejedná se tedy přímo o pozici v hlavním okně, ale o pozici v nadřazené komponentě. V Library v Scene Builderu nalezneme širokou nabídku tzv. kontejnerů. To jsou komponenty, do kterých se vkládají další komponenty. Právě z nich formulář poskládáme a ve výsledku docílíme kvalitního uzpůsobení velikosti okna. To je v dnešní době velmi důležité, jelikož aplikaci můžeme cílit na telefony, tablety nebo stolní PC. Díky přenositelnosti Javy bude fungovat ta samá aplikace všude a díky relativnímu pozicování použijeme na každém zařízení ten samý formulář, i když velikosti displejů jsou různé.

Příprava layoutu

V relativním pozicování se často o rozložení prvků na formuláři hovoří jako o layoutu. Pojďme si ho vytvořit. Vytvořte si novou JavaFX FXML aplikaci a pojmenujte ji UpominacNarozenin. Rovnou si na začátku ukažme, jak bude výsledný formulář aplikace vypadat:

Formulář upomínače narozenin v JavaFX - Java FX - Okenní aplikace

Jako obvykle odstraníme vše kromě App.java a vytvoříme si nový FXML dokument s příslušným kontrolerem. App.java upravíme tak, aby se nám při spuštění aplikace načetl nově vytvořený FXML dokument. Tento dokument si rovnou otevřeme v Scene Builderu.

Kontejner VBox

Jako první do formuláře vložíme z nabídky Containers položku VBox. To je kontejner, do kterého můžeme vkládat další komponenty. Ty se pak řadí pod sebe (vertikálně).

VBox roztáhněte po celém formuláři a v Inspectoru v záložce Properties nastavte Alignment na CENTER. Tím se budou komponenty, které vložíme do nového kontejneru, centrovat.

Nyní přejděme do záložky Layout, kde nastavíme komponentě kotvy a okraje.

Kotvy

Kotvy (Anchors) určují, jak se komponenta přichytává k okrajům rodičovské komponenty. Rodičovská komponenta je ta komponenta, ve které je vložená, v našem případě je to formulář, přesněji AnchorPane. My budeme chtít, aby se VBox přichytil ke všem čtyřem okrajům formuláře. Když budeme formulář roztahovat, bude se roztahovat i VBox.

Kotvy aktivujeme kliknutím na příslušnou čáru mezi obrázky dvou čtverců. Do jednotlivých políček pak vložíme samé nuly. VBox tak bude těsně přilepený k okraji formuláře:

Kotvy v JavaFX Scene Builderu - Java FX - Okenní aplikace

Okraje

Okraje určují velikost volného místa. Můžeme nastavit Padding, což je volné místo okolo obsahu komponenty. Dále máme v nabídce také Spacing, což je volné místo mezi komponentami, které jsou v našem VBox kontejneru vložené.

Všechny velikosti se v JavaFX uvádějí v pixelech.

Okraje nastavíme na hodnotu 20. Výsledkem bude, že na sobě nebudou komponenty nalepené, což by nevypadalo dobře:

Padding v JavaFX Scene Builder - Java FX - Okenní aplikace

Náš formulář prozatím vypadá takto:

Tvorba formuláře JavaFX aplikace - Java FX - Okenní aplikace

Kontejner GridPane

K zobrazení aktuálního data a nejbližších narozenin použijeme čtyři položky typu Label. Aby byly hezky uspořádané, vložíme je do GridPane. To je další kontejner, který komponenty řadí do tabulky.

GridPane vložíme do rodičovského kontejneru (VBox). Jako výchozí má nový GridPane vždy dva sloupce a tři řádky. Nám stačí tabulka 2x2, proto poslední řádek označíme kliknutím na modré číslo 2 a klávesou Delete ho odstraníme.

Pokud bychom v nějaké aplikaci naopak chtěli řádek nebo sloupec přidat, uděláme to pomocí kontextového menu (klikneme na GridPane pravým tlačítkem).

Alignment nastavíme na hodnotu CENTER, v záložce Layout nastavíme Min Height (minimální výšku) na 60. Následně oběma sloupcům tabulky nastavíme Max Width na 150. Sloupec označíme vždy kliknutím na jeho modré číslo.

Náš GridPane tedy bude široký maximálně 300 a vysoký minimálně 60.

Do každé buňky GridPane přetáhneme jeden Label z nabídky Controls a nastavíme jim texty podle obrázku:

Tvorba formuláře JavaFX aplikace - Java FX - Okenní aplikace

Kontejner HBox

Jako druhou komponentu do hlavního kontejneru vložíme HBox. Ten se používá pro řazení komponent vedle sebe (horizontálně). V záložce Layout mu nastavíme Spacing na 10 a položku Vgrow nastavíme na SOMETIMES. Tím docílíme toho, že se HBox bude roztahovat na výšku spolu s formulářem.

Seznam ListView

HBoxu doplníme dalšími komponentami. Jako první sem vložíme z nabídky Controls ListView. To je jednoduchý seznam položek, my ho budeme používat pro zobrazení seznamu přátel. ListView nastavíme PrefHeight i PrefWidth na hodnotu USE_COMPUTED_SIZE a Hgrow na SOMETIMES. Bude se tak roztahovat, co nejvíce to půjde. Rodičovský HBoxu nastavíme totožně.

Jako druhou komponentu přidáme další GridPane. Ten bude opět 2x2 (2 sloupce a 2 řádky). Protože nechceme, aby se roztahoval po celé výšce, nastavíme mu v záložce Layout maximální výšku, MaxHeight na 60. Do každé buňky vložíme Label s textem podle obrázku:

Tvorba formuláře JavaFX aplikace - Java FX - Okenní aplikace

Jako poslední komponentu do vertikálního kontejneru vložíme další horizontální kontejner, HBox. Nastavíme mu Spacing na hodnotu 10. V záložce Properties mu změníme zarovnání, tedy přepneme Alignment na CENTER. Tím se budou položky v něm vložené centrovat. Budou v něm obsažena dvě tlačítka (Button). Tlačítkům nastavíme texty podle obrázku a PrefWidth (v záložce Layout) na 70. Budou tak stejně široká.

Slušelo by se dodat, že PrefWidth je synonymum pro šířku. Ta je označena jako Preferred, protože se od skutečné šířky komponenty může lišit. Např. když nastavíme preferovanou šířku na 70 a formulář zmenšíme na 60, výška se nutně sníží s ním.

Tlačítko nemůže být širší, než formulář, pokud ovšem nemá nastavenou minimální šířku, tím by se zmenšení formuláře na takovou velikost nepovolilo.

Náš formulář máme hotový:

Tvorba formuláře JavaFX aplikace - Java FX - Okenní aplikace

Aplikaci nyní spustíme.

Před spuštěním musíte uložit scénu v Scene Builderu!

Když formulář roztáhneme, uvidíme, že se jeho obsah přizpůsobuje velikosti okna:

Tvorba formuláře JavaFX aplikace - Java FX - Okenní aplikace
Tvorba formuláře JavaFX aplikace - Java FX - Okenní aplikace

Pro případ, že se vám něco nepovedlo, si můžete stáhnout soubor přiložený níže a najít si chybu.

V příští lekci, Upomínač narozenin v JavaFX - Formuláře podruhé, budeme v práci s formuláři pokračovat. Vytvoříme si kontroler a nový dialog pro přidání přátel do aplikace.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 478x (6.05 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Řešené úlohy k 1.-3. lekci JavaFX
Všechny články v sekci
Java FX - Okenní aplikace
Přeskočit článek
(nedoporučujeme)
Upomínač narozenin v JavaFX - Formuláře podruhé
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
25 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity