2015-12-28 57 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

我沒有足夠的信譽來標記答案正確 –

相關問題