web-dev-qa-db-fra.com

JavaFX Vous avez plusieurs volets dans une scène?

J'essaie de faire une application qui aura une date en haut (toujours automatiquement centrée) et un contenu en bas qui ne sera aligné sur aucune direction. 

Je pensais que la meilleure façon de faire serait d'avoir: 

Pane normalLayout = new Pane();
StackPane centeredLayout = new Stackpane();
Label centeredText = new Label("I want this text centered!");
Button unorganizedButton = new Button("Press me");
centeredLayout.getChildren().add(centeredText);
normalLayout.getChildren().add(unorganizedButton);

Mais alors je ne peux pas faire quelque chose comme: 

Scene myScene = new Scene(centeredLayout, normalLayout, 500, 500);
Window myWindow = new Window();
myWindow.setScene(myScene);
myWindow.show();

Alors, comment cela peut-il être fait? Comment plusieurs volets peuvent-ils exister sur la même scène?

6
Hatefiend

La scène elle-même ne peut avoir qu'un seul volet root . Donc, si vous voulez 2 volets dans la scène, il vous en faut 3.

Scene  
  |   
  V
Root Pane (Vbox for example)
  |                   |
  V                   V
Pane1                Pane2

Dans votre code cela peut ressembler à ceci:

StackPane rootPane = new StackPane();
Scene scene = new Scene(rootPane,...);
Pane pane1 = new Pane();
Pane pane2 = new Pane();
rootPane.getChildren().addAll(pane1,pane2);

Selon la disposition de votre application, vous devez choisir les implémentations de volet appropriées.

Pour vous familiariser avec tous les conteneurs de mise en page, essayez l’application SceneBuilder. http://gluonhq.com/open-source/scene-builder/

Peut-être que ce lien vous aidera à comprendre le fonctionnement de la mise en forme dans JavaFX: http://docs.Oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htmhttps: // docs.Oracle.com/javafx/2/layout/builtin_layouts.htm

10
Marcel

Je vous suggèrerais de créer un "root" -Pane . Dans votre cas, vous pourriez utiliser un BorderPane.

Exemple:

BorderPane root = new BorderPane();

Label centeredText = new Label("I want this text centered!");
Button unorganizedButton = new Button("Press me");

BorderPane.setAlignment(centeredText, Pos.CENTER);

root.setTop(centeredText);
root.setBottom(unorganizedButton);

Ensuite, appelez simplement le constructeur avec le volet nouvellement créé.

Scene scene = new Scene(root, 500, 500);

Une addition:

Vous pouvez également simplement définir de nouveaux volets.

AnchorPane anchorPane = new AnchorPane();
root.setTop(anchorPane);
1
Yannick Rot