JavaFX
JavaFX és la llibreria que farem servir per construir interfícies gràfiques d’escriptori. És la successora de Swing, l’antiga llibreria GUI de Java, i es fa servir també per a aplicacions mòbils i encastades.
JavaFX no ve amb el JDK
Aquest és el primer que cal saber, i la causa de l’error més comú quan s’engega el primer projecte:
Error: JavaFX runtime components are missing, and are required to run this application
Fins a Java 10, JavaFX formava part del JDK d’Oracle. Des de Java 11 se’n va separar i es distribueix com un projecte a part, OpenJFX. Per tant, tenir el JDK instal·lat no és suficient: JavaFX s’ha d’afegir al projecte com qualsevol altra dependència.
Les versions de JavaFX segueixen el ritme del JDK, amb una versió cada sis mesos i una LTS cada dos anys. Les LTS actives són la 17, la 21 i la 25. Amb el JDK 25 farem servir JavaFX 25, que també és LTS.
Afegir JavaFX al projecte
Amb Maven, cal la dependència dels mòduls que facis servir i el plugin que engega l’aplicació amb el module path ben configurat:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>25.0.4</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>25.0.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<mainClass>cat.exemple.HelloApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
L’aplicació s’executa amb mvn javafx:run. Executar-la directament amb java -jar no funciona sense feina addicional, perquè cal indicar el module path i els mòduls de JavaFX.
JavaFX està repartit en mòduls i només cal declarar els que es fan servir:
| Mòdul | Conté |
|---|---|
javafx-base | Propietats, binding i col·leccions observables |
javafx-graphics | Application, Stage, Scene, formes, layouts |
javafx-controls | Els controls: Button, Label, TextField, taules |
javafx-fxml | La càrrega de fitxers FXML |
javafx-media, javafx-web | Àudio i vídeo, i el component WebView |
javafx-controls ja arrossega javafx-graphics i javafx-base, de manera que per a la majoria de projectes n’hi ha prou amb les dues dependències de l’exemple.
Els binaris també es poden baixar com a SDK des de Gluon i configurar-los a mà a l’IDE, però amb Maven o Gradle és molt més senzill.
El model de components
JavaFX organitza la interfície en tres nivells:
- Un programa JavaFX és una classe que estén la classe abstracta
Application. - El contenidor de màxim nivell és
Stage, que es correspon amb una finestra. - Els components visuals (
Node) viuen dins d’unaScene, formant un graf jeràrquic.
Una aplicació pot tenir diverses escenes, però un Stage només en mostra una alhora. Canviar d’escena és, doncs, la manera de canviar tot el contingut d’una finestra.
Per construir la interfície, sempre es fa el mateix:
- Preparar el graf de nodes.
- Construir una
Sceneamb el node arrel del graf. - Assignar la
ScenealStagei mostrar-lo.