阶段:不调整大小以适应场景

3

我有一个场景在舞台上,场景的宽度是337.0像素。但是当我将其添加到舞台时,舞台的大小为337.6像素,由于0.6像素的差异,在屏幕右侧边缘留下了一个白色间隙。

我尝试使用stage.sizeToScene(),但没有效果。我还尝试手动设置舞台的宽度,尝试使用stage.setWidth(337),但并没有影响舞台的宽度,它仍然保持在337.6。

然后我尝试了以下方法:stage.setWidth(337.0)。然后,当我使用stage.getWidth()在控制台上打印舞台宽度时,输出值为337.0,但实际上,0.6像素的白线仍然存在。

我也尝试了以下方法:

stage.hide();
stage.show();

这个方法有效,它去除了白线,但是窗口切换效果非常糟糕。有没有一种方法可以在不像上面那样切换窗口的情况下实现相同的效果。
任何帮助将不胜感激。

2
不要手动调整节点的大小和位置,而是使用自动布局(AnchorPane 在这里并不是很有用)- 我怀疑两个表单之间存在轻微的尺寸不匹配。 - kleopatra
是的,但我也看到过其他我之前使用过的布局出现了这个问题。这个问题也发生在Swing框架中,但我从来没有得到过任何答案。 - Meet Shah
好的,我发现了一些东西,请参考我在问题中的编辑。 - Meet Shah
当我切换回注册场景时,发生的情况是大小是我提到的337,但最初它已经变成了337.6。 - Meet Shah
我找到了一个解决方案,我们可以使用stage.hide()然后再使用stage.show(),但这会导致窗口切换,看起来很糟糕。 - Meet Shah
显示剩余3条评论
2个回答

1
我曾经遇到过舞台大小设置的相似问题。 在我的情况下,有用的方法是使用:
stage.setMinWidth(newActiveScene.getRoot().minWidth(-1));
stage.setMinHeight(newActiveScene.getRoot().minHeight(-1));

其中stage是您正在使用的舞台,newActiveScene是您在舞台上设置的新场景。

实际上,我正在使用一种方法在舞台上设置新场景,看起来像这样:

/**
 * Sets a new active {@link Scene} on the stage.
 *
 * @param newActiveScene the new scene to show
 */
public static void setActiveScene(Scene newActiveScene) {
    stage.setScene(newActiveScene);
    stage.setMinWidth(newActiveScene.getRoot().minWidth(-1));
    stage.setMinHeight(newActiveScene.getRoot().minHeight(-1));
}

stage 是使用的舞台。这假定 stage.show() 已经被调用过一次(例如在初始化舞台时)。


很抱歉,你的代码没有起作用,但是当我将setMinWidth和setMinHeight替换为setWidth和setHeight时,它就起作用了,谢谢。 - Meet Shah

0

根据@wollsi的建议,我想对他的代码进行一些编辑。这是对我很有效的做法:

    public void setActiveScene(Scene newActiveScene) {
        stage.setScene(newActiveScene);
        stage.setWidth(newActiveScene.getRoot().minWidth(-1));
        stage.setHeight(newActiveScene.getRoot().minHeight(-1));
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接