Využití JavaFx při tvorbě grafických aplikací

Vytvoření projektu v NetBeans

Vývojové prostředí NetBeans verze 8.0 nabízí v kategorii JavaFX vytvoření jednoho z pěti typů projektů. Především se jedná o JavaFX Application a JavaFX FXML Application. V JavaFX aplikaci jsou prvky uživatelského rozhraní definovány v kódu, zatímco JavaFX FXML aplikace používá pro tento účel jazyk FXML. V obou případech je po založení projektu vytvořena jednoduchá, ihned spustitelná aplikace typu „Hello World“, která je dále vyvíjena do zamýšlené podoby.

Postup založení projektu je ukázán v prvním a druhém video tutoriálu.

Třídy GUI

JavaFX obsahuje množství tříd pro tvorbu uživatelského rozhraní. Kromě tříd známých z knihovny Swing (tlačítka, textová pole atd.) se v balíčku javafx.scene nacházejí třídy takových prvků, jako jsou kontejnery pro média, dialogová okna umožňující výběr dne z kalendáře a mnoho dalších.

Jednotlivé prvky GUI (kontejnery, ovládací prvky, apod.) jsou umístěny ve stromové datové struktuře, nazývané Scene graph (graf scény) [2.1]. Tuto strukturu je možné vytvářet dvěma způsoby. Prvním z nich je „ruční“ psaní kódu, druhým je použití jazyka FXML.

Graf scény

Stage

Stage (Jeviště) je kontejnerem nejvyšší úrovně. Na platformě Windows představuje okno aplikace. Platforma, na které aplikace běží, vytváří jednu instanci třídy Stage.

Scene

Všechny prvky stromové hierarchie Uzlů (grafu scény) jsou uloženy v kontejneru Scéna (Scene). V konstruktoru Scény se definuje kořenový Uzel této hierarchie. Obecně se jedná o Předka (Parent), konkrétně jsou nejčastěji používány Oblasti (Region, tedy např. AnchorPane) [2.4].

Node

Abstraktní třída Node (Uzel) je předkem všech tříd, které jsou součástí stromové hierarchie GUI, tedy zejména kontejnerů a ovládacích prvků.

Region

Kontejnery slouží k uchovávání dalších Uzlů, kterými mohou být další kontejnery nebo listy (tlačítko, tvar, atp.). Kontejnery jsou odvozeny od třídy Region (Oblast, ta je odvozena od Parent).

Control

Ovladače umožňují uživateli provádět interakci s aplikací. Jedná se o tlačítka, posuvníky, lišty menu apod. V JavaFX jsou ovladače odvozeny od abstraktní třídy Control, a to jak přímo, tak nepřímo.

Canvas

Canvas, neboli Plátno, je Uzel, na jehož plochu je možné kreslit. Kreslení, spolu s dalšími, níže popsanými funkcemi, zajišťuje třída GraphicsContext2D (dále GC). Každé Plátno má jeden GC a referenci na něj je možné získat metodou getGraphicsContext2D() [2.12].

Shape

JavaFX poskytuje třídy pro reprezentaci geometrických tvarů. Tyto třídy jsou odvozeny od abstraktní třídy Shape (Tvar). Tvary jsou Uzly, lze je tedy vkládat do kontejnerů, provádět s nimi animace atd.

tvary

Chart

JPomocí JavaFX je možné vytvářet koláčové diagramy (třída PieChart) a diagramy zobrazující v kartézské soustavě souřadnic (XYChart).

FXML

Jazyk FXML umožňuje separaci vzhledu a logiky aplikace (spolu s CSS). Jedná se o jazyk založený na XML, ve kterém jsou instance tříd reprezentovány elementy a jejich Vlastnosti atributy. Přestože výhody FXML oproti kódování do Java tříd vyniknou zejména u větších aplikací, je dobré FXML používat i u menších aplikací, vzhledem ke snadnější údržbě a testování. V souboru FXML je zapsán graf scény.

ukázka FXML

CSS

V JavaFX lze pro definování vzhledu Uzlů použít stylový jazyk CSS. Podporována je verze CSS 2.1 spolu s některými identifikátory vlastností z CSS3. Identifikátory vlastností použitelné pro Uzly se vyznačují předponou -fx- (např. -fx-background-color).

Scene Builder

Scene Builder je oficiální nástroj společnosti Oracle pro intuitivní tvorbu GUI. Pracuje s FXML soubory a jednoduchým kliknutím a přetažením Uzlu ze seznamu umožňuje vytvářet komplexní uživatelská rozhraní (tedy obdobným způsobem jako např. Swing Designér v IDE NetBeans).