Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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òdulConté
javafx-basePropietats, binding i col·leccions observables
javafx-graphicsApplication, Stage, Scene, formes, layouts
javafx-controlsEls controls: Button, Label, TextField, taules
javafx-fxmlLa 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’una Scene, 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:

  1. Preparar el graf de nodes.
  2. Construir una Scene amb el node arrel del graf.
  3. Assignar la Scene al Stage i mostrar-lo.

Referències

Last change: , commit: 0ee48c2