2

我遇到了一个非常奇怪的行为,我怀疑这是 JavaFX 9 API 中的一个错误,但我很谨慎,因为我更有可能遗漏了一些东西。

MCVE:

public class MainApp extends Application {

    private Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        this.primaryStage = primaryStage;
        double xCord = 200;
        double yCord = 200;
        double width = 400;
        double height = 400;

        BorderPane borderPane = new BorderPane(new Button("Button"));
        Scene scene = new Scene(borderPane);
        primaryStage.setX(xCord);
        primaryStage.setY(yCord);
        primaryStage.setWidth(width);
        primaryStage.setHeight(height);

        primaryStage.setScene(scene);
        primaryStage.show();

        System.out.println(primaryStage.getWidth());
        System.out.println(primaryStage.getHeight());

        primaryStage.setOnCloseRequest(e -> {
            System.out.println(primaryStage.getWidth());
            System.out.println(primaryStage.getHeight());
        });

    }
}

我在 Linux(GNOME 和 FVWM)+ Windows 上对此进行了测试。问题仅在 Linux 上,即在关闭操作中宽度/高度值发生了变化。示例输出:

400.0
400.0
404.0
433.0 

我的猜测是窗口装饰是值的一部分,但仅在第二个块中。在应用程序运行期间,它不包括在内,并且会报告最初设置的值。在 GNOME 上,我得到了稍微不同的变化(w:0,h:37),因为装饰也不同。

我在 Java 8 上对其进行了测试,完全没有区别。Windows 似乎也按预期工作,两个部分的输出相同。我搜索了 JDK 错误,但没有发现这个报告。我希望有人可以确认这是否是预期的行为,或者确实是一种回归。

它给我带来的问题是,除了窗口大小/位置之外,我无法实现强大的首选项,因为在 Linux 上,窗口会爬走。(场景宽度/高度可以作为一种解决方法,但它仍然值得怀疑。)

4

1 回答 1

0

此问题已在 Java 10 中修复。(附加文本达到 30 个字符。)

于 2018-03-25T14:30:20.633 回答