JavaFX窗口居中显示

在JavaFX中,窗口的居中显示是一项常见的需求。本文将介绍如何在JavaFX应用程序中实现窗口的居中显示,并提供代码示例。让我们开始吧!

为什么要居中显示窗口?

在编写GUI应用程序时,窗口的居中显示是一种常见的设计选择。居中显示窗口可以增加用户体验,并使应用程序更加专业和易于使用。无论是启动应用程序时,还是在用户调整窗口大小后,窗口都应该保持在屏幕中央。接下来我们将讨论如何实现这一目标。

居中显示窗口的方法

JavaFX提供了几种方法来居中显示窗口。下面是其中的两种方法:

方法一:使用Screen类

JavaFX的Screen类提供了许多有用的方法来获取屏幕的大小和位置信息。我们可以使用它来计算窗口的居中位置。

import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class CenteredWindow extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建一个根布局
        StackPane root = new StackPane();
        // 创建一个场景
        Scene scene = new Scene(root, 400, 300);
        
        // 获取屏幕的可见边界
        Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds();

        // 设置窗口的位置和大小,使其居中显示
        primaryStage.setX((screenBounds.getWidth() - scene.getWidth()) / 2);
        primaryStage.setY((screenBounds.getHeight() - scene.getHeight()) / 2);
        primaryStage.setWidth(scene.getWidth());
        primaryStage.setHeight(scene.getHeight());

        // 设置窗口标题
        primaryStage.setTitle("居中显示窗口");

        // 在根布局中添加一些内容
        root.getChildren().add(/* 添加一些节点 */);

        // 设置场景并显示窗口
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在上面的代码示例中,我们首先创建一个StackPane作为根布局,并将其添加到场景中。接下来,我们使用Screen类获取屏幕的可见边界,并根据窗口和场景的大小计算窗口的居中位置。最后,我们设置窗口的位置和大小,并显示出来。

方法二:使用Bounds类

另一种居中显示窗口的方法是使用Bounds类。Bounds类表示一个矩形区域,我们可以使用它的属性来计算窗口的居中位置。

import javafx.application.Application;
import javafx.geometry.Bounds;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class CenteredWindow extends Application {

    @Override
    public void start(Stage primaryStage) {
        // 创建一个根布局
        StackPane root = new StackPane();
        // 创建一个场景
        Scene scene = new Scene(root, 400, 300);

        // 设置窗口的位置和大小,使其居中显示
        primaryStage.setOnShown(event -> {
            // 获取窗口的边界
            Bounds windowBounds = primaryStage.getScene().getWindow().getBounds();
            
            // 获取屏幕的可见边界
            double screenWidth = primaryStage.getScene().getWidth();
            double screenHeight = primaryStage.getScene().getHeight();
            
            // 计算窗口的居中位置
            double windowX = (screenWidth - windowBounds.getWidth()) / 2;
            double windowY = (screenHeight - windowBounds.getHeight()) / 2;
            
            // 设置窗口的位置
            primaryStage.setX(windowX);
            primaryStage.setY(windowY);
        });

        // 设置窗口标题
        primaryStage.setTitle("居中显示窗口");

        // 在根布局中添加一些内容
        root.getChildren().add(/* 添加一些节点 */);

        // 设置场景并显示窗口
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

在上面的代码示例中,我们首先创建一个StackPane作为根布局,并将其添加到场景中。然后,我们使用setOnShown方法来监听窗口显示事件,并在该事件发生时计算窗