javafx - 如何根据屏幕分辨率javafx在fxml中动态设置首选宽度和高度

标签 javafx fxml

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

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

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

最佳答案

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

这看起来像

MaximizedPane.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 中插入 <fx:define> block 的任何机制,等等。)

关于javafx - 如何根据屏幕分辨率javafx在fxml中动态设置首选宽度和高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487126/

相关文章:

JavaFX : Is this javafx-maven plugin configuration correct?

javascript - 如何从 javaFX 的 fxml 内部的 JavaScript 调用 java 方法

java - 将 HTML/CSS 集成到 JavaFX 的 FXML 和 CSS 中

javafx-2 - FXML 加载期间的 JavaFX IllegalAccessException()

css - FXML 中 CSS 文件的引用

java - javafx 中 TableColumn 的 setCellValueFactory 不会为一个值输入文本,但会添加空格

java - 如何将javaFX中使用filechooser加载的文件名插入到表中?

java - 构建后聚焦新窗口(Intellij IDEA)

javafx - 是否可以创建一个属性来监听 javafx 中自定义对象的更改?

java - 与已打开的 FXML Controller 通信