2015-12-28 54 views
1

我是javafx的新手。是否可以根据屏幕分辨率动态设置fxml文件中的首选宽度和高度?我知道如何让屏幕分辨率并设置为阶段:如何根据屏幕分辨率动态设置fxml中的首选宽度和高度javafx

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

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

回答

4

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

这看起来像

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); 
    } 
} 

(原因没有办法与场景生成器来做到这一点的是,它不支持在您的FXML中插入<fx:define>块的任何机制,等等。)

+0

感谢您的回答 –

+0

如果回答您的问题,请标记为正确答案:这将使其他用户更容易找到他们是否需要相同的信息。 –

+0

我没有足够的信誉来标记答案正确 –

相关问题