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

时间:2015-10-26 06:08:15

标签: java user-interface javafx pane

我正在尝试创建一个应用程序,其顶部有一个日期(总是自动居中),底部的内容不会与任何方向对齐。

我认为最好的办法是:

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

那怎么办呢?如何在同一场景中存在多个窗格?

2 个答案:

答案 0 :(得分:10)

它自己的场景只能有一个 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.htm https://docs.oracle.com/javafx/2/layout/builtin_layouts.htm

答案 1 :(得分:1)

我建议你创建一个" 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);