有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JavaFX屏幕分辨率缩放

我一直在寻找这样做的方法,但我只找到了This question without answers

我在一台1366x768笔记本电脑上开发,我使用JavaFX创建GUI(很抱歉,我不能发布代码,它基本上是一个包含两个网格的AnchorPane,其中包含更多网格,其中包含标签、文本字段和两个图表)

当我以另一种分辨率(1920x1080或1600x900)加载项目时,问题就出现了

我正在使用stage.setMaximized(true);,但这只会缩放背景、舞台本身,所以所有元素和容器(面板、标签、文本字段……)保持与1366x768分辨率相同的大小,使GUI在与1366x768分辨率不完全一致的情况下“不适合”

我希望我能很好地解释我的问题,我的英语还远远不够完美

有人对如何使元素与舞台分辨率成比例有什么建议吗

(我需要在每台显示器上最大化或全屏显示软件,所以固定分辨率(例如1366x768)似乎不是一个好的解决方案)

谢谢大家

更新:

我只是举了个小例子。它是默认JavaFX主播面板中的一个2x1网格窗格,我在网格窗格中添加了两个示例按钮

<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) 个答案

  1. # 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个像素