JavaFX 屏幕分辨率缩放
JavaFX screen resolution scaling
我一直在寻找一种方法来做到这一点,但我只找到了 This question without answers。
我正在一台 1366x768 的笔记本电脑上开发,我使用 JavaFX 创建一个 GUI(很抱歉,但我不能 post 代码,它基本上是一个包含一对的 AnchorPane GridPanes,其中包含更多 GridPanes,其中包含标签、TextFields 和几个图表)。
当我以另一个分辨率(1920x1080 或 1600x900)加载项目时出现问题。
我正在使用 stage.setMaximized(true);
,但这只会缩放背景和舞台本身,因此所有元素和容器(面板、标签、文本字段......)保持与1366x768 分辨率,使 GUI "not fit" 的分辨率不完全是 1366x768。
我希望我能很好地解释我的问题,我的英语远非完美。
有没有人对如何使元素随舞台分辨率缩放有任何建议?
(我需要软件在每台显示器上都最大化或全屏显示,所以固定分辨率(例如 1366x768)似乎不是一个好的解决方案)。
谢谢大家
更新:
我刚刚创建了一个小例子。它是默认 JavaFX AnchorPane 内的 2x1 GridPane,我在网格窗格中添加了两个示例按钮。
<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: 按钮位于屏幕左上角的示例代码,当我放大分辨率时,其余部分只是空的 space。
更新 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();
您需要为子项设置锚定窗格约束。在你的情况下 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 像素。
我一直在寻找一种方法来做到这一点,但我只找到了 This question without answers。
我正在一台 1366x768 的笔记本电脑上开发,我使用 JavaFX 创建一个 GUI(很抱歉,但我不能 post 代码,它基本上是一个包含一对的 AnchorPane GridPanes,其中包含更多 GridPanes,其中包含标签、TextFields 和几个图表)。
当我以另一个分辨率(1920x1080 或 1600x900)加载项目时出现问题。
我正在使用 stage.setMaximized(true);
,但这只会缩放背景和舞台本身,因此所有元素和容器(面板、标签、文本字段......)保持与1366x768 分辨率,使 GUI "not fit" 的分辨率不完全是 1366x768。
我希望我能很好地解释我的问题,我的英语远非完美。
有没有人对如何使元素随舞台分辨率缩放有任何建议?
(我需要软件在每台显示器上都最大化或全屏显示,所以固定分辨率(例如 1366x768)似乎不是一个好的解决方案)。
谢谢大家
更新:
我刚刚创建了一个小例子。它是默认 JavaFX AnchorPane 内的 2x1 GridPane,我在网格窗格中添加了两个示例按钮。
<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: 按钮位于屏幕左上角的示例代码,当我放大分辨率时,其余部分只是空的 space。
更新 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();
您需要为子项设置锚定窗格约束。在你的情况下 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 像素。