JavaFX阶段坐标在关闭时更新

时间:2018-03-11 03:21:44

标签: java javafx javafx-9

我遇到了一种非常奇怪的行为,我怀疑它是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 Bugs但是没有找到这个报告。我希望有人可以确认这是预期的行为,还是回归。

它给我带来的问题是,除了窗口大小/位置之外,我无法实现强大的首选项,就像Linux上的Windows一样。 (场景宽度/高度可以用作变通方法,但它仍然可疑。)

1 个答案:

答案 0 :(得分:0)

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