屏幕上的 JavaFX 中心舞台

标签 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 位置吗?或者如何正确使用这个功能?

最佳答案

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

关于屏幕上的 JavaFX 中心舞台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29558449/

相关文章:

java - 如何将节点添加到选项卡 JavaFX 内的 HBox?

java - 如何摆脱这个泛型警告?

java - 从 JDialog 按钮刷新 JFrame 并刷新表

Java 代码覆盖率的想法?

java - 记录未保存在 mysql DB 中

JavaFX Node.lookup() 仅对使用 FXMLLoader 加载的 Parent 中的某些元素返回 null

java - RedisCacheManager 未更新 keyspace_misses

java - 在 Spring RestController 中显式将 POJO 转换为 JSON 的最佳方法

java - 运行 JavaFX Gradle 应用程序时出现 NoClassDefFoundError StringUtils 或 Gson

javafx-2 - 如何拖动JavaFX的未修饰窗口(阶段)