it-swarm.com.ru

JavaFX Есть несколько панелей в одной сцене?

Я пытаюсь сделать приложение, которое будет иметь дату вверху (всегда автоматически по центру) и контент внизу, который не будет выровнен в каком-либо направлении. 

Я подумал, что лучший способ сделать это будет иметь: 

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);

Но тогда я не могу сделать что-то вроде: 

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

Так как это можно сделать? Как несколько панелей могут существовать на одной сцене?

6
Hatefiend

Сама сцена может иметь только одну root панель .... Поэтому, если вы хотите 2 панели в сцене, вам нужно 3.

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

В вашем коде это может выглядеть так:

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

В зависимости от того, как ваше приложение должно быть размечено, вы должны выбрать правильные реализации Pane.

В качестве небольшого совета для ознакомления со всеми контейнерами макетов попробуйте приложение SceneBuilder. http://gluonhq.com/open-source/scene-builder/

Возможно, эта ссылка поможет вам понять, как работает макет в JavaFX: http://docs.Oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htmhttps: // docs.Oracle.com/javafx/2/layout/builtin_layouts.htm

10
Marcel

Я бы посоветовал вам создать «корневую» панель .. В вашем случае вы можете использовать BorderPane.

Пример:

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);

После этого просто вызовите конструктор с только что созданной панелью.

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

Дополнение:

Вы также можете просто установить новые панели.

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