Почему содержимое дочернего окна (дочерняя стадия) не изменяет размер автоматически?

Я работаю в NetBeans 8 с Java 8/JavaFX.

У меня есть приложение, которое запускает основной этап на основе файла 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 выглядит так (после всех операторов импорта):

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

Проблема: когда я нажимаю на угол второго окна, чтобы перетащить его и изменить его размер, размер содержимого не изменяется. Что мне не хватает или что мне нужно для автоматического изменения размера?


person adeena    schedule 28.02.2014    source источник
comment
Так и должно быть, дайте мне попробовать ваш код!   -  person ItachiUchiha    schedule 28.02.2014
comment
Я согласен, что это должно работать, но это не так :( Я посмотрел, должно ли когда я вызываю stage в вызывающей функции, иметь что-то вроде stage.setResizable(true)... и т.д... это не изменилось результат У меня все еще есть проблема.   -  person adeena    schedule 28.02.2014


Ответы (3)


Вместо того, чтобы использовать 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();

}
person ItachiUchiha    schedule 28.02.2014
comment
Это сработало! Спасибо еще раз)! Да, глядя на другой опубликованный ответ, очевидно, что Группа - это не то, что я действительно хотел. - person adeena; 28.02.2014

Group нельзя напрямую изменить размер, как указано в его javadoc. Таким образом, размер сцены не изменяется, а размер окна изменяется из угла. Вы можете использовать подклассы Pane вместо. Например, попробуйте с

VBox root = new VBox();
person Uluk Biy    schedule 28.02.2014

Размер Group нельзя изменить: «Группа будет принимать коллективные границы своих дочерних элементов и не может быть изменена напрямую». http://docs.oracle.com/javafx/2/api/javafx/scene/Group.html

Замените Group другим макетом, например StackPane или BorderPane.

Я боролся с тем же, если бы мы только прочитали документацию. :D

person broot02    schedule 28.02.2014