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

Scene Graph

El graf d’escena (scene graph) és l’arbre de nodes que forma la interfície. Té una arrel, i cada node pare pot contenir fills. La Scene es construeix a partir de l’arrel, i el Stage mostra la Scene.

L’arrel ha de ser un node capaç de tenir fills. Hi ha dues famílies:

  • Group: un contenidor sense comportament propi. No col·loca els fills ni els redimensiona: cadascun es dibuixa a les coordenades que tingui. Serveix per a dibuix i per agrupar figures que s’han de transformar juntes.
  • Region: la base dels contenidors que col·loquen els fills segons una política, i dels controls. Els Pane en són subclasses, i és el que faràs servir gairebé sempre.
StackPane arrel = new StackPane();
arrel.getChildren().add(new Label("Hello!"));

Scene scene = new Scene(arrel, 400, 200);
primaryStage.setScene(scene);

getChildren() retorna una ObservableList: quan hi afegeixes o en treus un node, la interfície es refresca sola. No cal repintar res.

Layouts

Un layout és una Region que decideix on van els seus fills i què passa quan la finestra canvia de mida. Triar el layout adequat estalvia gairebé tot el càlcul de posicions.

LayoutCol·loca els fills
HBox, VBoxEn una fila o en una columna
StackPaneApilats un damunt de l’altre, centrats
BorderPaneEn cinc zones: dalt, baix, esquerra, dreta i centre
GridPaneEn una graella de files i columnes
FlowPane, TilePaneUn darrere l’altre, saltant de línia quan cal
AnchorPaneAncorats a distàncies fixes de les vores
PaneEnlloc: posicions absolutes que has de donar tu

Els layouts s’aniuen, i és així com es construeix una pantalla real: un BorderPane general, amb una HBox de botons a baix i un GridPane de camps al centre.

VBox arrel = new VBox(10);                       // 10 px entre fills
arrel.setPadding(new Insets(20));
arrel.getChildren().addAll(
        new Label("Nom:"),
        new TextField(),
        new Button("Desa"));

Dues propietats que resolen la major part dels problemes de col·locació:

  • spacing i padding: separació entre fills i marge interior del contenidor.
  • Priority.ALWAYS: marca quin fill s’ha de fer gran quan sobra espai, amb HBox.setHgrow(node, Priority.ALWAYS) o l’equivalent vertical.

Referències

Last change: , commit: 0ee48c2