Tipus de nodes
Tot el que es veu en una aplicació JavaFX és un Node: un botó, una etiqueta, un cercle i també el contenidor que els agrupa. Dins del graf, cada node fa un dels tres papers següents:
- Arrel: el primer node del graf, el que es passa a la
Scene. Ha de poder tenir fills. - Branca (parent): un node que en conté d’altres. Poden ser-ho un
Group, unaRegion(la base dels layouts i dels controls) o unWebView. - Fulla (leaf): un node sense fills, com una etiqueta o una figura.
Famílies de nodes
| Paquet | Conté | Exemples |
|---|---|---|
javafx.scene.control | Els controls amb què interactua l’usuari | Button, Label, TextField, CheckBox, ChoiceBox, TableView |
javafx.scene.layout | Els contenidors que col·loquen els fills | BorderPane, GridPane, HBox, VBox |
javafx.scene.shape | Figures geomètriques | Circle, Rectangle, Line, Polygon |
javafx.scene.image, javafx.scene.media | Imatges, àudio i vídeo | ImageView, MediaView |
javafx.scene.web | Un navegador encastat | WebView |
Propietats dels nodes
Cada node exposa el seu estat com un conjunt de propietats amb getters i setters. Un Label, per exemple, té un text, i per tant getText() i setText(String):
Label etiqueta = new Label("inicial");
etiqueta.setText("actualitzat");
A més de la parella de mètodes, cada propietat té un mètode que retorna l’objecte propietat sencer, textProperty(). Aquest objecte és observable, i és el que permet escoltar-ne els canvis i enllaçar-lo amb altres propietats, com es veu a Binding de propietats.
Hi ha propietats que tenen tots els nodes, perquè estan definides a Node: visible, disable, opacity, id, styleClass i les de posició i mida.
Dibuixar directament
Quan el que vols no és compondre controls sinó pintar (un joc, un gràfic a mida), la manera pràctica no és crear milers de nodes, sinó fer servir un Canvas. És un sol node amb una superfície de dibuix, sobre la qual s’escriu amb un GraphicsContext:
Canvas canvas = new Canvas(400, 200);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.CORNFLOWERBLUE);
gc.fillOval(10, 10, 80, 80);
La diferència és important: amb nodes, JavaFX manté cada element i el repinta quan cal; amb un Canvas, el que es guarda és el resultat del dibuix i el repintat és cosa teva.