我希望TilePane
跨越整个窗口宽度。在没有任何特定设置的情况下设置我的Stage
,Scene
和TilePane
窗口时,这可以按预期工作。即使我的屏幕仅适用于9个图块,我设置tilePane.setPrefColumns(100)
时也是如此。我手动没有为舞台设置任何大小。
当我的应用程序启动时,场景首先设置为宽度1,然后是320,然后是1920(在1920x1080屏幕上启动时)。我正在运行XMonad(平铺窗口管理器),在显示窗口全屏之前可能会导致宽度为320.
然而,在切换到另一个场景(stage.setScene
)并再次切换回来之后 - 重新使用旧场景或使用最初使用的相同代码构建新场景 - {{1的首选宽度(方式超过1920)用于设置场景和舞台的宽度。因此,上面提到的TilePane
列是“显示的”,尽管屏幕只有足够宽的9列。
当手动调整窗口大小时,所有内容都“快照”回到预期值(即我的情况下为1920)。
如何确保以舞台宽度渲染(重新)附加到舞台的场景?如何触发虚假的“窗口调整大小”事件?如何使场景/窗格宽度取决于舞台宽度而不是相反?
我更喜欢在多屏幕设置中也能使用的解决方案。
答案 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)
在我的案例中实际帮助的是将最初的width
和height
值分配给舞台:
stage.setWidth(800);
stage.setHeight(600);