有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

屏幕上的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<ActionEvent>()
       {
          @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位置吗?或者如何正确使用此功能


共 (1) 个答案

  1. # 1 楼答案

    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);
        }
    }