如何根据屏幕分辨率javafx在fxml中动态设置首选宽度和高度
How to set preferred width and height in fxml dynamically based on screen resolution javafx
我是 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. Then use an expression binding 中定义它以将根窗格的 prefWidth
和 prefHeight
绑定到屏幕.
这看起来像
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>
块等任何机制。)
我是 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. Then use an expression binding 中定义它以将根窗格的 prefWidth
和 prefHeight
绑定到屏幕.
这看起来像
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>
块等任何机制。)