Масштабирование разрешения экрана JavaFX

Я искал способ сделать это, но я нашел только этот вопрос без ответов.

Я разрабатываю ноутбук 1366x768, я использую JavaFX для создания GUI (извините, но я не могу опубликовать код, это в основном AnchorPane, содержащий пару GridPanes, которые содержат больше GridPanes, которые содержат метки, текстовые поля и пару диаграмм).

проблема возникает, когда я загружаю проект на другое разрешение (1920x1080 или 1600х900).

Я использую stage.setMaximized(true);, но это только масштабирует фон, саму сцену, поэтому все элементы и контейнеры (панели, метки, текстовые поля.....) остаются того же размера, с разрешением 1366x768, делая Гуй "не годен" при таком разрешении не совсем 1366х768.

надеюсь, я достаточно хорошо объяснил свою проблему, мой английский далек от совершенства.

есть ли у кого-нибудь предложения о том, как сделать элементы масштабируемыми со сценой разрешение?

(мне нужно, чтобы программное обеспечение было максимизировано или полноэкранным на каждом мониторе, поэтому создание фиксированного разрешения (например, 1366x768) не кажется хорошим решением).

спасибо всем.

обновление:

Я создал небольшой пример. Это 2x1 GridPane внутри по умолчанию JavaFX AnchorPane, я добавил две кнопки примера в панель сетки.

<AnchorPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" >
<children>
    <GridPane prefHeight="300.0" prefWidth="400.0">
        <columnConstraints>
            <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
        </columnConstraints>
        <rowConstraints>
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
            <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
        </rowConstraints>
        <children>
            <Button fx:id="example1" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.valignment="CENTER" />
            <Button fx:id="example2" mnemonicParsing="false" text="Example 2" GridPane.halignment="CENTER" GridPane.rowIndex="1" GridPane.valignment="CENTER" />
        </children>
    </GridPane>
</children>

этот код выглядит красиво в 400x300 экран (слишком мало, я знаю, это просто пример), когда я масштабирую его до 1366x768 (не настоящий полный экран, просто stage.setMaximized(true);), GridPane не масштабируется, только сама сцена, поэтому у меня есть полноэкранный фон с панелью 400x300 (с ее крошечными кнопками) в левом верхнем углу экрана.

TL; DR: пример кода кнопки остаются в левом верхнем углу экрана, а остальное-просто пустое пространство, когда я масштабирую разрешение.

обновление 2; Забыл код Java.

Parent root = FXMLLoader.load(getClass().getResource("UI.fxml"));
Scene scene = new Scene(root, java.awt.Toolkit.getDefaultToolkit().getScreenSize().width,
            java.awt.Toolkit.getDefaultToolkit().getScreenSize().height);
stage = new Stage();
stage.setMaximized(false);
stage.setScene(scene);
stage.setTitle("Example Menu");
stage.show();

1 ответов


вам нужно установить ограничения панели привязки для дочернего элемента. в вашем случае gridpane в

AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"

это пойдет после вашего

 GridPane prefHeight="300.0" prefWidth="400.0" **HERE** 

это максимизирует дочерний компонент внутри контейнера, следовательно, 0 0 0 0 пикселей с каждой стороны .