JavaFX 在一个场景中有多个窗格?

JavaFX Have multiple Panes in one scene?

我正在尝试制作一个顶部有日期(始终自动居中)和底部内容的应用程序,该应用程序不会与任何方向对齐。

我认为最好的方法是:

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

那怎么办呢?同一个场景怎么可以有多个窗格?

我建议您创建一个 "root"-Pane。 在您的情况下,您可以使用 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);

Scene 本身只能有一个 root Pane。 所以如果你想在场景中有 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);

根据应用程序的布局方式,您必须选择正确的窗格实现。

作为熟悉所有布局容器的小提示,请尝试使用 SceneBuilder 应用程序。 http://gluonhq.com/open-source/scene-builder/

也许这篇 link 可以帮助您了解布局在 JavaFX 中的工作原理: http://docs.oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htm https://docs.oracle.com/javafx/2/layout/builtin_layouts.htm