屏幕上的JavaFX中心舞台

我想在屏幕上居中。
这就是我尝试过的:

public class Test extends Application { @Override public void start(final Stage primaryStage) { Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } }); StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.centerOnScreen(); primaryStage.show(); } public static void main(String[] args) { launch(args); } } 

调用centerOnScreen()后,舞台太高了。 它似乎没有正常工作。 我是否需要自己制作x和y pos? 或者我该如何正确使用此function?

centerOnScreen()的默认实现如下:

 Rectangle2D bounds = getWindowScreen().getVisualBounds(); double centerX = bounds.getMinX() + (bounds.getWidth() - getWidth()) * CENTER_ON_SCREEN_X_FRACTION; double centerY = bounds.getMinY() + (bounds.getHeight() - getHeight()) * CENTER_ON_SCREEN_Y_FRACTION; x.set(centerX); y.set(centerY); 

哪里

 CENTER_ON_SCREEN_X_FRACTION = 1.0f / 2; CENTER_ON_SCREEN_Y_FRACTION = 1.0f / 3; 

centerY将始终将舞台设置为略高于中心。

要将舞台定位在准确的中心,您可以使用您设置的自定义X和Y值

 public class Main extends Application { @Override public void start(Stage primaryStage) { Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction((ActionEvent event) -> { System.out.println("Hello World!"); }); StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds(); primaryStage.setX((primScreenBounds.getWidth() - primaryStage.getWidth()) / 2); primaryStage.setY((primScreenBounds.getHeight() - primaryStage.getHeight()) / 2); } public static void main(String[] args) { launch(args); } }