【问题标题】:How to set preferred width and height in fxml dynamically based on screen resolution javafx如何根据屏幕分辨率在fxml中动态设置首选宽度和高度javafx
【发布时间】:2015-12-28 02:50:06
【问题描述】:

我是 javafx 的新手。是否可以根据屏幕分辨率在 fxml 文件中动态设置首选宽度和高度?我知道如何获取屏幕分辨率并将其设置为舞台:

Screen screen = Screen.getPrimary(); 
Rectangle2D bounds = screen.getVisualBounds();
stage.setWidth(bounds.getWidth());
stage.setHeight(bounds.getHeight());

我的问题是关于在 fxml 文件中动态设置 prefWidth 和 prefHeight。另外我想知道我是否可以以编程方式更改 fxml 文件中的属性值,我正在使用场景生成器。

【问题讨论】:

    标签: javafx fxml


    【解决方案1】:

    您可以(在某种程度上)在 FXML 中执行此操作,但不能使用 Scene Builder(据我所知)。您可以使用fx:factory 属性来获取主屏幕并将其定义在<fx:define> block 中。然后使用expression binding将根窗格的prefWidthprefHeight绑定到屏幕的宽度和高度。

    这看起来像

    最大化窗格.fxml:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <?import javafx.scene.layout.StackPane?>
    <?import javafx.scene.control.Label?>
    <?import javafx.stage.Screen?>
    
    <StackPane xmlns:fx="http://javafx.com/fxml/1"
               prefWidth="${screen.visualBounds.width}" 
               prefHeight="${screen.visualBounds.height}" >
        <fx:define>
            <Screen fx:factory="getPrimary" fx:id="screen"/>
        </fx:define>
        <Label text="A maximized pane"/>    
    </StackPane>
    

    这是一个快速测试工具:

    import java.io.IOException;
    
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    public class MaximizedFXMLPane extends Application {
    
        @Override
        public void start(Stage primaryStage) throws IOException {
            Scene scene = new Scene(FXMLLoader.load(getClass().getResource("MaximizedPane.fxml")));
            primaryStage.setScene(scene);
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    (Scene Builder 无法做到这一点的原因是它不支持在 FXML 中插入 &lt;fx:define&gt; 块的任何机制等。)

    【讨论】:

    • 感谢您的回答
    • 如果它回答了您的问题,请将答案标记为正确:这将使其他用户更容易找到他们是否需要相同的信息。
    • 我没有足够的声誉来标记答案正确
    • 任何人都可以将答案标记为正确(并以此获得声誉)。只需点击答案旁边的复选标记即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2021-07-06
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多