2016-12-25 53 views
0

我已經嘗試設置minWidth,並在start()方法的場景minHeight,呼籲show()之後,但似乎getHeight()呼叫不包括裝飾品,因爲它應該。舞臺的高度與根場景相同。階段的getHeight不包括裝飾

該文件表明,這不應該是這種情況。任何想法我做錯了什麼?

操作系統:Ubuntu的16.04

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     Parent r = FXMLLoader.load(getClass().getResource("things.fxml")); 
     Scene root = new Scene(r); 

     primaryStage.setTitle("foo"); 
     primaryStage.setScene(root); 

     primaryStage.sizeToScene(); 
     primaryStage.centerOnScreen(); 

     primaryStage.show(); 

     // primaryStage.getHeight() and root.getHeight() are the same here! 
     // doc suggests that they are supposed to be different 

     primaryStage.setMinWidth(primaryStage.getWidth()); 
     primaryStage.setMinHeight(primaryStage.getHeight()); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

回答

1

什麼是文件中解釋是正確的,你可能有誤解。我根據什麼寫在那裏,並根據您在代碼上所犯的錯誤解釋,另一件事我用windows,因此它可能是由於你的操作系統

sizeToScene()方法: 設置寬度和此窗口的高度以匹配此窗口場景內容的大小。我們知道您的stage尺寸與您的場景尺寸相同,並且您尚未爲場景定義尺寸,因此它只包含其內容Parent/FXML的尺寸屬性。

Parent r = FXMLLoader.load(getClass().getResource("things.fxml")); 
Scene root = new Scene(r); //Size not defined 

這就解釋了在最後兩個方法setMinWidth/setMinHeight定義的大小。在這裏,你只給出幾乎相同的值(+16寬度和高度+38那些裝飾),以您的stage

primaryStage.setMinWidth(primaryStage.getWidth()); //return the same width as Scene+16 
primaryStage.setMinHeight(primaryStage.getHeight()); //return the same height as Scene+38 

enter image description here

如果,例如,Parent/FXML大小爲(600x400),舞臺的getWidth()方法將返回(616)和getHeight()(438)。我希望這會幫助你解決你的問題,祝你好運!

+0

問題是,我似乎沒有得到+16寬度和+38高度,你似乎從裝飾中獲得。可能是一個操作系統的事情。 – imbuedHope

+0

我從來沒有使用Ubuntu或至少編程過它,所以我不能確定這是什麼原因! –

+0

也許是,我只是加載了一個具有特定寬度和高度的根,並檢查了尺寸,當我調用不是規範行爲的show時,裝飾不包括在內。也可能是一個糟糕的JDK安裝。好吧。 – imbuedHope