2016-10-02 64 views
0

我想跨越整個窗口寬度有一個TilePane。當設置我的StageSceneTilePane窗口沒有任何特定的設置時,這按預期工作。即使我的屏幕只有9個區塊足夠寬,我也設置了tilePane.setPrefColumns(100)。我沒有爲舞臺手動設置任何尺寸。JavaFX:在切換場景時使TilePane使用全窗口寬度

當我的應用程序啓動時,場景首先設置爲寬度1,然後是320,然後是1920(當在1920x1080屏幕上啓動時)。我正在運行XMonad(平鋪窗口管理器),在顯示窗口全屏之前可能會導致320之間的寬度。

但是,在切換到另一個場景(stage.setScene)後再切換回來 - 重新使用舊場景或使用最初使用的相同代碼構建新場景 - 首選寬度爲TilePane(超過1920 )用於設置場景和舞臺的寬度。因此,上面提到的100列是「顯示」的,儘管屏幕只有9列足夠寬。

手動調整窗口大小時,所有內容都會「捕捉」回預期值(即我的情況下爲1920)。

我怎樣才能確保(再)附加到一個舞臺的場景以屏幕的寬度呈現?我怎樣才能觸發假的「窗口大小調整」事件?我如何使場景/窗格寬度取決於舞臺寬度而不是其他方式?

我更喜歡也可以在多屏幕設置中使用的解決方案。

回答

0

什麼是真正在我的幫助的情況下,是初始widthheight值賦給階段:

stage.setWidth(800); 
stage.setHeight(600); 
0

假設所有的場景都是在同一個舞臺是你可以做的是

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 

stage.sceneProperty().addListener(e -> {   
    if(stage.getScene() == EnterSceneYouWantHere) 
    { 
     tilePane.setMaxWidth(gd.getDisplayMode().getWidth());                                 
     tilePane.setMaxHeight(gd.getDisplayMode().getHeight()); 
     tilePane.setMinWidth(gd.getDisplayMode().getWidth());                                 
     tilePane.setMinHeight(gd.getDisplayMode().getHeight()); 
    } 
}); 

應該工作,但還沒有測試確實,如果它確實應該多顯示器工作。

+0

'GraphicsEnvironment.getLocalGraphicsEnvironment()getDefaultScreenDevice();'拋出'HeadlessException',即使' stage.show()'(不改變場景)。 –

+0

這應該工作正常,我已經使用了特定的代碼行。試試這個Dimension ScreenSize = Toolkit.getDefaultToolkit()。getScreenSize();'用'screenSize'代替'gd'。 –