Java 阶段:不根据场景调整大小

Java 阶段:不根据场景调整大小,java,javafx,Java,Javafx,我在舞台上有一场戏。场景的宽度为337.0像素。但是,当我将其添加到stage时,stage的大小是337.6像素,由于0.6像素的差异,在屏幕的右边缘留下了一个白色间隙 我尝试使用了stage.sizeToScene(),但不起作用。我还尝试通过尝试stage.setWidth(337)手动设置stage的宽度。这并没有影响舞台的宽度,它仍然保持在337.6 我尝试了以下操作:stage.setWidth(337.0)。然后,当我使用stage.getWidth()在控制台上打印stage w

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

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

我尝试了以下操作:
stage.setWidth(337.0)
。然后,当我使用
stage.getWidth()
在控制台上打印stage width时,打印的值是337.0,但实际上,0.6像素的白线仍然保留

我尝试了以下alos:

stage.hide();
stage.show();
这是有效的,它删除了白线,但它显示了窗口切换,这看起来非常糟糕。有没有一种方法可以在不切换上述窗口的情况下实现同样的操作


任何帮助都将不胜感激。

我在设置舞台的正确尺寸时遇到了类似的问题

在我的案例中有帮助的是使用:

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()
已经被调用过一次(例如在初始化stage时)。

正如Simon Wall所建议的,我想对他的代码进行一些编辑。这对我来说很有效:

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

不要手动调整节点的大小/位置,而是使用自动调整节点大小/位置的布局(AnchorPane在这里不是很有用)-我怀疑这两种形式之间存在轻微的大小不匹配。是的,但我也看到我之前使用的其他布局也出现了此问题。这个问题也发生在Swing框架中,但我从未得到任何答案。好的,我发现了一些问题,请参考我问题中的编辑。。可能是四舍五入/初始阶段尺寸的问题:隐约记得(sry,没有现成的id)最近有一个固定的问题。你看到的可能是剩余的..当我切换回注册场景时,发生的是我提到的大小,337,但最初它变成了337.6。很抱歉你的代码不起作用,但当我用setWidth和setHeight替换setMinWidth和setMinHeight时,它起作用了,谢谢。