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
我正在尝试制作一个顶部有日期(始终自动居中)和底部内容的应用程序,该应用程序不会与任何方向对齐。
我认为最好的方法是:
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