我遇到了一种非常奇怪的行为,我怀疑它是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一样。 (场景宽度/高度可以用作变通方法,但它仍然可疑。)
答案 0 :(得分:0)
此问题已在Java 10中修复。(附加文本可达到30个字符。)