Java týden Předvánoční slevová akce
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Lekce 1 - Úvod do JavaFX

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V tomto Java on-line kurzu se naučíme vytvářet okenní (formulářové) aplikace v JavaFX. Naučíme se pracovat s tlačítky, textovými poli, tabulkami, ale i obrázky nebo např. grafy.

Pro absolvování kurzu nepotřebujete žádné pokročilé znalosti. Předpokládám však, že znáte alespoň základy objektově orientovaného programování v Javě.

API pro GUI v Javě

V Javě máme k dispozici hned 4 možnosti, jak vytvářet grafické aplikace. Jsou to:

  • AWT - nejstarší, relativně rychlé API, které je ale navázáno na volání systémového API
  • Swing - využívá vlastní vykreslování, které je celé napsané v Javě a nezávislé na konkrétní platformě (naše aplikace vypadá všude stejně), je samozřejmě pomalejší, ale uživatelsky přívětivější
  • SWT - vytvořeno firmou IBM, využité v Eclipse, jednodušší než Swing, využívá nativní kód
  • JavaFX - modernější náhrada za Swing, který je velmi rozšířený, ale neumožňuje tolik uzpůsobit vzhled aplikací

JavaFX

JavaFX je moderní framework pro tvorbu bohatých okenních aplikací. Bohatých je zde myšleno vizuálně. JavaFX přináší podporu obrázků, videa, hudby, grafů, CSS stylů a dalších technologií, které zajistí, že výsledná aplikace je opravdu líbivá. Zároveň je kladen důraz na jednoduchost tvorby, všechny zmiňované věci jsou v JavaFX v základu. JavaFX se hodí jak pro desktopové aplikace, tak pro webové applety nebo mobilní aplikace.

JavaFX vs. Swing

JavaFX se stala součástí standardní Javy ve verzi 8. Všichni doufali, že postupem času nahradí Swing a zastane funkci hlavního API pro desktop v Javě. V JavaFX sice vzniklo velké množství nových aplikací, firma Oracle se ovšem rozhodla její vývoj ukončit a předat jej open-source komunitě, která postupně JavaFX vylepšuje. Nově jsou oficiální stránky openjfx.io. To ještě není problém. Horší je, že od Javy verze 11 již JavaFX není součástí JRE/JDK. Abyste v ní mohli vyvíjet, je ji třeba doinstalovat.

Pokud jste začátečníci a chcete vytvářet jen nějaké jednoduché okenní aplikace, je možná lepší nápad použít Swing. Pokud chcete vytvořit komplexnější okenní aplikaci v Javě, jste tu dnes správně :)

Instalace JavaFX

Abychom s JavaFX mohli začít, musíme ji tedy nejprve ručně nainstalovat. Nebo, což je preferovanější způsob, ji použít jako kteroukoliv jinou knihovnu. Při použití JavaFX jako knihovny silně doporučuji používat Maven, nebo ještě lépe Gradle pro automatickou správu závislostí. Knihovny se pak lépe spravují. Odkazy na tyto technologie vedou na alternativní návody na instalaci JavaFX pro pokročilejší uživatele.

JavaFX jako knihovna

V tomto úvodním článku si ukážeme instalaci JavaFX jako knihovny pomocí IDE NetBeans, což je pro začátek nejjednodušší. Pokud vás zajímají další možnosti instalace nebo chcete rozumět tomu, co se děje pod pokličkou, připravil jsem pro vás článek Manuální instalace JavaFX.

Knihovny jsou hostované na stránkách Maven central a jsou rozděleny do následujících kategorií:

  • base - definuje základní API pro JavaFX, bindingy, property, kolekce a události
  • controls - zahrnuje všechny ovládací prvky, kterými JavaFX disponuje
  • fxml - definuje FXML API pro JavaFX
  • graphic - obsahuje hlavní API pro graf scény všech ovládacích prvků (layouty, kontejnery, životní cyklus aplikace, grafické tvary, transformace, canvas, ošetření vstupu, kreslení, zpracování obrázků), dále obsahuje API pro animace, podporu CSS stylů a další
  • media - obsahuje API pro práci se zvukem a videem
  • swing - podpora pro swingové komponenty
  • web - obsahuje API pro zobrazení webových stránek za pomoci WebView komponenty

Pro minimální konfiguraci budeme potřebovat celkem 3 knihovny: base, graphics a controls. Vytvořte si novou složku, do které stáhnete tyto tři knihovny.

Hledani potrebnych knihoven

V Maven centrálním repozitáři naleznete požadované knihovny.

Výběr správné verze knihovny

Vyberete si požadovanou verzi. Je důležité, aby jste měli stejnou verzi pro všechny moduly JavaFX.

Zobrazení všech souborů, které lze stáhnout

Přes odkaz "View all" si zobrazíte seznam všech dostupných souborů, které lze stáhnout.

Stažení knihovny se zdrojovými kódy
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Stáhněte soubor jak se zdrojovými kódy (source), tak specifický podle operačního systému (Windows, Linux, MacOS).

NetBeans a JavaFX

NetBeans je k dispozici ve dvou verzích:

My budeme používat tu nejnovější, tedy verzi 10. Začneme Spuštěním NetBeans.

Úvodní obrazovka NetBeans

Vytvoření projektu

V levé horní části v menu zvolíme File -> New Project.

Průvodce novým projektem – výběr platformy

V kategorii zvolíme Java a z projektů vybereme Java Application. Nesmíte vybrat kategorii JavaFX, protože pak by bylo NetBeans zmatené. Tlačítkem Next přejdeme na další okno.

Průvodce novým projektem – název a umístění projektu

Nyní zvolíme název a umístění projektu. Tlačítkem Finish dokončíme tvorbu nového projektu.

Čistý projekt bez JavaFX

Projekt máme vytvořený, teď je potřeba přidat JavaFX knihovny.

Přidání JavaFX do NetBeans

Nejdříve si stažené JavaFX knihovny z dřívějších kroků uložte někam na bezpečné místo, odkud je nebudete mazat. Budeme totiž vytvářet Globální knihovnu pro NetBeans, kterou budeme později přidávat ke každému projektu, ve kterém budeme pracovat s JavaFX. V menu najdeme záložku Tools a zvolíme položku Libraries.

Přidání nové globální knihovny

V tomto okně klikneme na tlačítko New Library pro založení nové globální knihovny.

Pojmenování nové globální knihovny

Knihovnu pojmenujeme například JavaFX a potvrdíme tlačítkem OK.

Přidání souborů javaFX knihovny

Nyní přidáme do nově vytvořené globální knihovny odkazy na JAR soubory knihovny JavaFX. Klikneme na tlačítko Add Jar/Folder.

Výběr souborů knihovny JavaFX

Vybereme pouze "binární" soubory s knihovnou JavaFX. Nevybírejte soubory označené source, které jsme stahovali dříve. Tlačítkem Add Jar/Folder potvrdíme soubory.

Přehled vybraných JavaFX knihoven

Tlačítkem OK zavřeme dialog s globálními knihovnami. Nyní musíme přidat tuto globální knihovnu k našemu projektu.

Přidání JavaFX do projektu

Přechod do nastavení projektu

Nad červeně označenou oblastí stiskneme pravé tlačítko myši. Zobrazí se nám velký seznam možností, co lze s projektem udělat. Nás bude zajímat poslední položka Properties.

Nastavení modulepath

Otevřelo se nám okno s vlastnostmi projektu. My se nejdříve musíme přesunout do záložky Libraries. Zde musíme nastavit dvě věci: Modulepath a Classpath. Začneme nastavením Modulepath. Stiskneme červeně označené tlačítko a zobrazí se nám nové dialogové okno.

Přidání globální JavaFX knihovny do modulpath

V tomto okně vybereme naší globální JavaFX knihovnu a potvrdíme tlačítkem OK.

Přidání globální JavaFX knihovny do classpath

Nyní stiskneme druhé tlačítko pro výběr souborů, které se připojí do Classpath.

Přidání globální JavaFX knihovny do classpath

Opět vybereme pouze "binární" soubory, ne zdrojové. Tlačítkem OK vše potvrdíme a dialog zmizí.

Přehled přidaných knihoven do projektu

Knihovnu máme přidanou, můžeme tedy stisknout tlačítko OK pro uložení změn. Nyní jsme úspěšně připojili JavaFX knihovnu do projektu.

Testovací projekt

Abychom si vše otestovali, vložíme do třídy Main testovací kód pro otestování funkčnosti. Pro jistotu ho znovu uvedu:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloNetbeans extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }
}
Spuštění projektu

Nyní se pokusíme projekt spustit. Přesuneme se myší opět nad červeně vyznačenou oblast, stiskneme pravé tlačítko a z nabídky vybereme možnost Run.

Projekt se nepodaří zkompilovat a IDE zobrazí následující hlášku:

Chybová hláška při prvním spuštění

Abychom chybu odstranili, musíme se přesunout opět do nastavení projektu, tentokrát ale do záložky Run.

Přidání parametrů pro Java Virtual Machine

Do červeně označeného místa vložíme následující text:

--add-modules=javafx.controls

V budoucnu budeme nepochybně potřebovat přidat ještě další části JavaFX knihovny. Pro přidání upravíte globální knihovnu, přidáte soubory a do textu výše přidáte nový modul, např.: javafx.controls. Jednotlivé moduly se oddělují znakem ,.

Vložení parametrý JVM

Tlačítkem OK potvrdíme a projekt znovu spustíme. Nyní již vše proběhne hladce a aplikace se spustí.

Gratuluji, podařilo se vám zprovoznit JavaFX na vašem počítači. V příští lekci, FXML a první formulářová aplikace v JavaFX, si ukážeme, jak v IDE NetBeans vytovřit novou JavaFX aplikaci.


 

 

Článek pro vás napsal Petr Štechmüller
Avatar
Jak se ti líbí článek?
2 hlasů
Autor se věnuje primárně programování v Jave, ale nebojí se ani webových technologií.
Všechny články v sekci
Okenní aplikace v Java FX
Miniatura
Následující článek
FXML a první formulářová aplikace v JavaFX
Aktivity (8)

 

 

Komentáře

Avatar
Robert Michalovič:15. března 6:22

Pěkný článek. Když už si tam načal kompilaci přes příkazový řádek nechce se ti doplnit i tvorbu spustitelných jar? Ať to máš dokonalé.

 
Odpovědět
15. března 6:22
Avatar
Ondrej Mejzlik:7. září 21:00

Ahoj, prosím o radu. Mám NetBeans IDE 11.0 a SceneBuilder 8.5. Když si v FXMLDocumentCon­trolleru nadefinuji komponenty @FXML, tak je SceneBuilder nevidí - nemám možnost je přiřadit. Zkoušel jsem otevřít i starší projekt, ale jak FX:ID odstraním, už ho znovu nepřidám - SB mi nic nenabídne. Umíte mi někdo poradit? Zkoušel jsem výše uvedený postup s doplněním knihoven, hned v úvodu se píše stáhnout "source", ale pak už se o nich nikde nemluví - jedu na Windows, tak jsem importoval WIN, ale co ty sources? Díky moc

 
Odpovědět
7. září 21:00
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Robert Michalovič
Petr Štechmüller:8. září 11:10

Tvorba spustitelných JAR souborů tu je vysvětlena, hned 3x:

Odpovědět
8. září 11:10
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Ondrej Mejzlik
Petr Štechmüller:8. září 11:15

Ahoj, Jakou verzi Javy používáš? Vypadá to, že máš SceneBuilder verze 8.5, který je určený pro Javu 8, ale pak píšeš, že jsi stahoval knihovny z Mavenu (ty jsou až pro Javu 11). Možná to je důvod, proč Ti to nefunguje...

Odpovědět
8. září 11:15
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Ondrej Mejzlik:8. září 18:40

Ahoj Petře, díky za odpověď, v PC mám nainstalovanou Javu 8 Update 221, Javu 8 Update 221 64 bit a Java SE Development Kit update 221 64 bit.

 
Odpovědět
8. září 18:40
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Ondrej Mejzlik
Petr Štechmüller:8. září 18:41

Tak v tom případě nemusíš postupovat podle tohoto návodu, protože Java 8 v sobě již obsahuje JavaFX runtime.

Odpovědět
8. září 18:41
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Ondrej Mejzlik:8. září 18:49

Díky za radu, knihovny pro jistotu teda vyhodím, ale čím by teda mohlo být, že mi to nepropisuje ty @FXML? Nejde to ani v jednom směru - když je doplním do NetBeans do FXMLDocumentCon­trolleru, SB je nevidí a když je naopak dopíšu do Code/fx:id ve SceneBuilder, tak se to nepropíše do NB.... Díky moc :-)

 
Odpovědět
8. září 18:49
Avatar
Ondrej Mejzlik:8. září 18:58

… možná je problém v NetBeans - zkusím starší verzi :-)

 
Odpovědět
8. září 18:58
Avatar
Petr Daříček:17. listopadu 19:34

Mam NetBeans 11 a koukam ze tam jsou nektere odlisnosti.

  1. Pri vytvoreni projektu nemam kategorii Java. Mam Java with Maeven, Java with Gradle, Java with Ant. Zvolil jsem Java with Maeven. Je to spravne?
  2. Kdyz dam Properties na Projektu tak na dialogu neni moznost Libraries. Mozna souvisi ze spatnym typem projektu (viz. prvni otazka).

Je netbeans 11 tak moc odlisny od 10?

Dik za pomoc
Petr

 
Odpovědět
17. listopadu 19:34
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Petr Daříček
Petr Štechmüller:18. listopadu 8:35

Ahoj,
co jsem koukal, tak v posledních NetBeans opravdu není možnost samotného Java projektu. Podle mě je to jedině dobře. Žijeme v době, kdy skoro každý trochu větší projekt potřebuje alespoň jednu závislost. Spravovat tyto závislosti ručně je ke zbláznění, proto tu máme nástroje, které by měly práci se závislostmi ulehčit.

Volbou Java with Maven určitě nic nezkazíš. Je to asi nejlepší začátek.

Možnost Libraries jsi nejspíš nenašel právě z důvodu, že o knihovny se bude starat Maven. Pro přidání závislostí se prosím podívej na článek, kde přesně popisuji, jak přidat JavaFX knihovny pomocí Mavenu.

Přeji mnoho úspěchů, při tvorbě JavaFX aplikací ;-)

Odpovědět
18. listopadu 8:35
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.