JavaFX

JavaFX
VývojářOracle Corporation
Aktuální verze20.0.1 (duben 2023)
Operační systémmultiplatformní
Vyvíjeno vJava
Typ softwaruRich Internet applications
LicenceOpen source
Webopenjfx.io
Některá data mohou pocházet z datové položky.

JavaFX je softwarová platforma postavená na bázi platformy Java z dílny společnosti Sun Microsystems. Slouží pro vývoj tzv. RIA aplikací (Rich Internet applications), v překladu bohatých internetových aplikací. Jak již z názvu vyplývá, jedná se především o prvky zajišťující interaktivitu webových stránek, tedy stránek, které s uživatelem, oproti těm statickým, nějakým způsobem komunikují. V případě JavaFX webových aplikací, které se formou pluginu spouští z prohlížeče, navíc platforma umožňuje si aplikaci stáhnout a využívat ji jako klasický desktopový program a to i v offline módu. JavaFX je cílena na vývojáře programů toužících po rychlém a snadném vývoji pro desktopy, internetové prohlížeče, ale i rychle rozvíjející se mobilní oblast. Vznikla jako reakce na masové rozšíření platforem jako je Adobe Flash a především Microsoft Silverlight.

Před verzí JavaFX 2.0 se k vývoji na platformě používal staticky typovaný deklarativní skriptovací jazyk JavaFX Script. Od této verze je JavaFX implementována jako nativní Java knihovna a aplikace v JavaFX jsou proto programovány v Javě. JavaFX Script již dále není podporován. Oracle to vysvětluje tím, že můžeme použít ostatní skriptovací jazyky podporující JVM, jako Groovy nebo Scala.[1]

JavaFX v  březnu roku 2014 zcela nahradil zastaralý Swing, jako nástroj pro tvorbu GUI v Javě.

Vlastnosti

Platforma byla navržena tak, aby se její uživatelé mohli místo kódování soustředit na kreativní část práce. Mimo jiné nabízí také velmi dobrou podporu pro používání multimediálních prvků, ať už jde o video, audio, animace, atd. Konkurenční výhodu přináší také přenositelnost mezi platformami – JavaFX koresponduje s heslem „Write once, run anywhere“. To znamená, že aplikace naprogramované na platformě JavaFX můžete spouštět na kterémkoliv prostředí, kde běží JRE (Java Runtime Environment). Od verze 2.2 je možné pomocí Native Packaging zabalit aplikaci tak aby se dalo nainstalovat a spustit bez nutnosti nainstalovaného JRE.

V současnosti je JavaFX oficiálně plně podporována operačními systémy Windows XP, Vista, Windows 7, Windows 8, macOS a Linux. U mobilních zařízení lze spouštět aplikace na Androidu, systému Windows Mobile a dalších příslušných OS.

Vývoj

Nástroje

Pro vývoj v JavaFX se používá například vývojové prostředí NetBeans IDE nebo Eclipse, které jsou zdarma. Na rozdíl od IntelliJ IDEA je naopak placeným prostředím. Zde jsou uvedené pouze tři nejpoužívanější prostředí, ale je jich mnohem víc a záleží na vývojáři, které z nich bude vyhovovat nejvíce. NetBeans IDE je k dispozici na stránkách Oraclu a dá se stáhnout společně s JDK.

Pomocí nástroje Java FX scene builder je možné navrhovat uživatelské rozhraní stylem „táhni a pusť“z angl. drag and drop). Výstup je ukládán do souboru typu FXML (nástavba XML).

Nasazení aplikací

JavaFX platformu je možné nasadit následujícími způsoby:

  • Java pluginy – nasazení Java apletů do prohlížečů
  • Java Web Start – nasazení samostatné desktopové aplikace pomocí JNLP
  • Jako standardní desktopová aplikace
  • Jako mobilní aplikace

Historie

JavaFX Script, skriptovací jazyk JavaFX přišel s projektem od Chrise Olivera a nazýval se F3.  Sun Microsystems poprvé oznámily JavaFX na celosvětové konferenci Java Developerů JavaOne v květnu 2007.  Rok poté v květnu 2008 Sun Microsystems oznámili plán na vydání JavaFX pro prohlížeče a desktopy ve třetí čtvrtině roku 2008. JavaFX pro mobily v druhé čtvrtině roku 2009. Také oznámili několikaletou dohodu s On2 Technologies na jejich rozsáhlé grafické kapacity, které se přidali do JavaFX a tím umožnili pracovat s TrueMotion Video Codec. Koncem července 2008 si mohli developeři stáhnout zkušební verzi JavaFX SDK pro Windows a Macintosh a zároveň s JavaFX pluginem pro IDE NetBeans 6.1.  Důležité uvolnění verze od JavaFX 1.1 má název založen na názvu ulice nebo sousedství v San Francisku. Vydané update většinou tento název nenesou.

  • květen 2007 – poprvé představen projekt JavaFX veřejnosti na konferenci vývojářů JavaOne
  • květen 2008Sun Microsystems oznámil plán, že do konce roku 2008 uvolní JavaFX pro prohlížeče a desktopy, pro mobilní zařízení pak na jaře 2009
  • od konce července 2008 – možnost náhledu do JavaFX SDK pro Windows a Macintosh, také uvolněn plugin pro IDE NetBeans 6.1
  • prosinec 2008Sun uvolnil první verzi platformy – JavaFX 1.0
  • únor 2009 – JavaFX dostupná také pro mobilní zařízení ve verzi JavaFX 1.1
  • červen 2009 – Na konferenci JavaOne oznámena verze JavaFX 1.2
    • Beta podpora pro Linux a Solaris
    • Skinovatelnost komponent pomocí CSS
    • Vestavěné ovládací prvky a layouty
    • Vestavěné grafy
    • JavaFX I/O management
    • Zastírání rozdílů mezi počítači a mobilními zařízeními
    • Zvýšení rychlosti
  • duben 2010JavaFX 1.3
    • Vylepšení výkonu
    • Podpora dalších platforem
    • Vylepšená podpora pro ovládací prvky uživatelského rozhraní
  • srpen 2010JavaFX 1.3.1
    • Rychlý start aplikace JavaFX
    • Vlastní progress bar pro spuštění aplikace.
  • říjen 2011JavaFX 2.0
    • Nová sada Java rozhraní pro JavaFX otevřela možnosti pro všechny Java vývojáře, kteří nyní mohou pracovat s JavaFX, aniž by bylo nutné se učit nový skriptovací jazyk.
    • Podpora JavaFX Script byla trvale ukončena.
    • Nový jazyk pro tvorbu uživatelského rozhraní, založený na XML, nazývaný FXML.
    • JavaFX runtime využívá systémových funkcí, jako např. video kodek.
    • Oracle oznámil svůj záměr open source JavyFX.
    • Zrušení podpory pro JavaFX Mobile a další.
  • listopad 2011 – JavaFX 2.0 OpenJFX
    • Komunita přijímá JavaFX jako open source a začíná jí vyvíjet. 
  • duben 2012JavaFX 2.1
    • První oficiální verze pro macOS (pouze stolní počítače)
    • Podpora pro H.264/MPEG-4 AVC a Advanced Audio Coding
    • Cooltype text
    • UI vylepšení, včetně combo boxu, grafy (skládaný graf) a menu bar
    • Webview nyní umožňuje JavaScriptu volat metody v Javě
  • srpen 2012 – JavaFX 2.2 
    • Podpora Linuxu (obsahuje plugin a webstart) 
    • Canvas 
    • Nové ovládací prvky: Color Picker (dovolí vybrat barvu z palety barev anebo možnost vytvoření vlastní), Pagination (používá se pro navigaci mezi stránkami) 
    • Podpora HTTP Live Streamingu  
    • Dotykové události a gesta 
    • Native Packaging 
    • Native Packaging dovoluje zabalení aplikace jako tzv. „native bundle“ (nativní balíček). To dává uživatelovi možnost instalovat a spustit aplikaci bez dalších externích vazeb na JRE 
    • Java SE 7 update 6 má v sobě zabalenou JavaFX a instaluje se zároveň s Oracle Java SE platformou  
  • březen 2014 JavaFX 8 
    • Oficiálně nahradila swing 
    • Nové značení sjednocené s verzí JDK (Java 8) 
    • Nové téma s názvem Modena 
    • Vylepšení fullscreenu 
    • Veřejná API pro CSS strukturu 
    • JavaFX 3D 
    • Zaveden Multi-touch 
    • Podpora Rich textu. Text se dá stylovat pomocí CSS, transformovat, přidávat další efekty atd. 
    • Swing node dovoluje vložit do JavaFX swingové prvky 
    • Podpora tisku 
    • Zavedení nového DatePickeru (zobrazí kalendář, který slouží k  výběru data) a TreeTable (Stromová struktura)
  • JavaFX 9
    • Uvolnění je oznámeno na březen 2015

JavaFX jako open source

V říjnu 2011 Oracle oznámil záměr poskytnutí JavaFX toolkit open Source komunitě a v listopadu téhož roku byla JavaFX připojena do OpenJDK komunity. Od té doby je OpenJFX kompletně open source. 

OpenJFX je takzvaná, next generation client aplikace pro desktopy a další systémy. Každý kdo se chce zúčastnit vývoji aplikace má příležitost a může se jednat o vytvoření portů nebo třeba přidání nové vlastnosti atd.

Více informací se dozvíte na oficiální wiki OpenJDK (https://wiki.openjdk.java.net/display/OpenJFX/Main), která je jenom v angličtině.

JavaFX nahrazuje swing

Důvody

Zastaralá technologie zavedena v 90. letech.  Která nepodporuje nové technologické prvky: 

  • nemá podporu dotykových zařízení 
  • obtížně měnitelný vzhled 
  • neumí vytvářet animace 
  • nepodporuje Data binding 
  • neumí pracovat s animacemi

Klíčové rysy JavaFX

  • SceneGraph → je to stromová struktura která definuje aplikaci uživatelské rozhraní (user interface).  
  • Scene Builder → nástroj sloužící pro snadnou tvorbu rozhraní aplikace. Vytvořené rozhraní se ukládá jako FXML (jazyk založený na XML pro JavaFX) 
  • Více než šest desítek definovaných komponentů pro snadný vývoj aplikace. 
  • Pomocí CSS možnost stylování grafických prvků. Vývojář se může zaměřit na funkčnost aplikace a grafik na vzhled. 
  • Vestavěná podpora animací. Programátor nemusí ručně vyrábět animace. JavaFX má pro tuto potřebu metody, díky kterým se snižuje čas nutný k tvorbě aplikace 
  • Podpora základních mediálních formátů jako je zvuk nebo video. 
  • Multi-touch podpora pro vyvíjení aplikací pro dotykové displeje. 
  • Podpora pro 3D nástroje → ve Scene Builder je možnost práce s 3D objekty 

SceneGraph 

  • Patří sem všechny vizuální elementy (např. obrázky,2D obrazce, komponenty, atd.) vztah mezi nimi je definován pozicí ve stromě jinak také rodičovský vztah. 
  • Každá pozice ve stromě se nazývá Node. Kořen stromu (Node s nejvyšší pozici) se jmenuje Root, je to jediný node, který nemá ve stromě žádného rodiče. Všechny node v grafu musí být ve stromové struktuře a musí mít rodiče (vyjma rootu). 
  • Nody můžeme rozdělit do dvou kategorií. 
    • Větev → tyto objekty jsou tzv. Parent class (rodičovské třídy). Parent class dovolují objektu mít potomka. Patří sem například: 
      • Group objects (kolekce nodů) 
      • Region objects (StackPane, AnchorPane, atd.) do kterých se umísťují další prvky (TextBox, Label, Button, atd.) 
      • Control objects (Button, RadioButton, ChoiceBox) které vlastní node potomky nemají 
    • List → tyto objekty nemohou mít vlastní potomky. Například grafické obrazce (čtverec, kruh, polygon), ImageView (slouží pro zobrazení obrázků) a MediaView (používají se pro přehrávání videa a hudby) 
  • Každý node může být transformovatelný (mění výšku, šířku, otáčí se), animovatelný, filtrovatelný a také může spouštět události (EventHandlery)

Příklad vytvoření aplikace

 ''//importy''

 import javafx.application.Application; 
 import javafx.event.ActionEvent; 
 import javafx.scene.Scene; 
 import javafx.scene.control.Button; 
 import javafx.scene.layout.Pane; 
 import javafx.scene.shape.Rectangle; 
 import javafx.stage.Stage; 

 //Třída dědí od abstraktní třídy aplikace 

 public class SceneGraphStruktura extends Application {
     /** 
      * @param args the command line arguments 
      */ 
     public static void main(String[] args) { 
 //        spouštěcí metoda aplikace 
 
         launch(args); 
     }      

     @Override 
     public void start(Stage primaryStage) { 
        
 //    vytvoření tlačítka 
         Button btn = new Button(); 
 //        nastaví tlačítku nápis  
         btn.setText("Nakresli čtverec"); 
          
 //    vytvoří kořenový node (tzv. root) 
         Pane root = new Pane(); 
  
 //   Přidá se tlačítko do rootu a zobrazí 
 //   Kdyby se node nepřidal do Pane (nebo jiného plátna) tak by se nevykreslil  (nebyl by nastavený rodičovský prvek) 
         root.getChildren().add(btn); 
         
 //   nastavení události při stisknutí tlačítka pomocí lambda výrazů, které zjednodušují anonymní třídy(Viz JAVA 8) 
          btn.setOnAction((ActionEvent event) -> { 
               
 //    vytvoří čtverec (x,y, šířka, výška) 
             Rectangle rec=new Rectangle(100,100,50,50); 
              
 //    přidá čtverec do rootu 
             root.getChildren().add(rec); 
         }); 
  
 //   vytvoření scénu ve které se bude všechno z rootu vykreslovat.
         Scene scene = new Scene(root, 300, 250); 
 
 //   nastaví Stage(okno) nadpis  
         primaryStage.setTitle("Ukázka"); 
 
 //   nastaví do Stage scénu         
 
         primaryStage.setScene(scene); 
 
 //   zobrazí stage  
         primaryStage.show(); 
     } 
 }

CSS

JavaFX dává k dispozici skinování komponentů pomocí CSS. Používá vlastní atributy v CSS například pro vyplnění barvou (příklad:  .vyplnBarvou { -fx-fill: red }). To vyžaduje od grafika, aby se naučil tyto nové atributy a mohl je používat. Skinování zatím nepodporuje animování. Pro rozpoznání každý atribut pro FX začíná -fx-.

Nedostatky

JFX je stále ve vývoji a s každou novou verzí přibývají různé nové prvky. Chybí ji důležité prvky pro vyvíjení aplikací na mobily jako například geolokace, orientace zařízení nebo natáčení kamerou.  Při přehrávání videa nebo zvuku mohou být použité pouze kodeky, které licencuje Oracle.

Reference

  1. JavaFX Frequently Asked Questions [online]. oracle [cit. 2013-08-23]. Kapitola 8. Does JavaFX 2 support JavaFX Script?. Dostupné online. (anglicky) 

Související články

Externí odkazy

Média použitá na této stránce

Duke (Java mascot) waving.svg
Autor: sbmehta converted to SVG from Sun Microsystems AI version., Licence: BSD
Duke, the Java Mascot, in the waving pose. Duke images are now Free Graphics see duke:Project Home Page for more details.