Я искал метод для этого, но я нашел только This question without answers.JavaFX разрешение экрана масштабирование
Я развиваю ноутбук 1366x768, я использую JavaFX для создания графического интерфейса (извините, но я не могу опубликовать код, это в основном AnchorPane, содержащая пару GridPanes, которые содержат больше GridPanes, которые содержат ярлыки , TextFields и пара диаграмм).
Проблема возникает, когда я загружаю проект на другое разрешение (1920x1080 или 1600x900).
Я использую stage.setMaximized(true);
, но это только масштабирует фон, сам этап, поэтому все элементы и контейнеры (панели, ярлыки, текстовые поля .....) остаются того же размера, что и с разрешением 1366x768, что делает Графический интерфейс «не подходит» при разрешениях, которые не являются точно 1366x768.
Надеюсь, я объяснил свою проблему достаточно хорошо, мой английский далеко не идеален.
Есть ли у кого-нибудь какие-либо предложения о том, как создавать шкалы элементов с разрешением сцены?
(Мне нужно, чтобы программное обеспечение было максимально или полноэкранным на каждом мониторе, поэтому фиксированное разрешение (1366x768, например) не похоже на хорошее решение).
Спасибо всем.
Update:
Я только что создал небольшой пример. Это 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();
Боюсь, что это невозможно, если не увидеть код. Звучит как проблема компоновки, возможно, жестко закодированные позиции или размеры. Вы читали комментарии по связанному вопросу? Кажется, это аналогичная проблема. –
Я ничего не закодировал. Я делал все с помощью «JavaFX SceneBuilder 2», и при просмотре размера все (Min, pref и max) говорит «USE_COMPUTED_SIZE».Я понимаю, что это трудно помочь, не видя кода, но если я поставлю код онлайн, меня могут уволить, и я не хочу этого, извините. Спасибо, что пытались помочь :) – Tuzane
Я вижу, но, может быть, вы можете написать небольшой, самодостаточный пример, который не связан с вашей работой? Просто простой экран с одним или двумя компонентами для имитации проблемы? –