JavaFX:切换场景时TilePane使用全窗口宽度

时间:2016-10-02 22:24:14

标签: java user-interface javafx javafx-8

我希望TilePane跨越整个窗口宽度。在没有任何特定设置的情况下设置我的StageSceneTilePane窗口时,这可以按预期工作。即使我的屏幕仅适用于9个图块,我设置tilePane.setPrefColumns(100)时也是如此。我手动没有为舞台设置任何大小。

当我的应用程序启动时,场景首先设置为宽度1,然后是320,然后是1920(在1920x1080屏幕上启动时)。我正在运行XMonad(平铺窗口管理器),在显示窗口全屏之前可能会导致宽度为320.

然而,在切换到另一个场景(stage.setScene)并再次切换回来之后 - 重新使用旧场景或使用最初使用的相同代码构建新场景 - {{1的首选宽度(方式超过1920)用于设置场景和舞台的宽度。因此,上面提到的TilePane列是“显示的”,尽管屏幕只有足够宽的9列。

当手动调整窗口大小时,所有内容都“快照”回到预期值(即我的情况下为1920)。

如何确保以舞台宽度渲染(重新)附加到舞台的场景?如何触发虚假的“窗口调整大小”事件?如何使场景/窗格宽度取决于舞台宽度而不是相反?

我更喜欢在多屏幕设置中也能使用的解决方案。

2 个答案:

答案 0 :(得分: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());
    }
});

应该可以工作,但如果确实没有测试,它应该适用于多个显示器。

答案 1 :(得分:0)

在我的案例中实际帮助的是将最初的widthheight值分配给舞台:

stage.setWidth(800);
stage.setHeight(600);
相关问题