为什么子窗口(子阶段)内容不会自动调整大小?

时间:2014-02-28 16:30:58

标签: javafx fxml java-8

我正在使用Java 8 / JavaFX在NetBeans 8中工作。

我有一个基于fxml文件启动主阶段的应用程序。

有一个菜单选项供用户根据要求启动第二阶段。打开窗口的功能如下所示:

@FXML
private void openChildWindow(ActionEvent event) throws Exception {

        Group root = new Group();
        Stage stage = new Stage();

        AnchorPane frame = FXMLLoader.load(getClass().getResource("second.fxml"));
        root.getChildren().add(frame);
        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();


    }

second.fxml的内容如下所示(在所有import语句之后):

<AnchorPane id="AnchorPane" prefHeight="680.0" prefWidth="1020.0" xmlns:fx="http://javafx.com/fxml/1" >
    <stylesheets><URL value="@css/mycss.css" /></stylesheets>
    <children>
    <TabPane AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="10.0"
          AnchorPane.bottomAnchor="10.0" AnchorPane.rightAnchor="0.0"  >
        <Tab text="A" closable="false"></Tab>
    </TabPane>
    </children>
</AnchorPane>

问题:当我点击第二个窗口的一角来拖动并调整其大小时,内容没有调整大小。我缺少什么或我需要什么才能自动调整大小?

3 个答案:

答案 0 :(得分:3)

Group不能直接调整大小,如其javadoc中所述。因此,当窗口从角落调整大小时,它不会被场景调整大小。您可以使用Pane的子类代替。例如,尝试使用

VBox root = new VBox();

答案 1 :(得分:2)

请将Group直接放入AnchorPane

,而不是使用Scene
@FXML
private void openChildWindow(ActionEvent event) throws Exception {

    Stage stage = new Stage();
    AnchorPane frame = FXMLLoader.load(getClass().getResource("second.fxml"));
    Scene scene = new Scene(frame );
    stage.setScene(scene);
    stage.show();

}

答案 2 :(得分:0)

Group无法调整大小,“一个小组将承担其子女的集体界限,并且不能直接调整大小。” http://docs.oracle.com/javafx/2/api/javafx/scene/Group.html

Group替换为不同的布局,例如StackPaneBorderPane

如果我们只阅读了文档,我就会遇到同样的问题。 :d