JavaFX制作弹出框

JavaFX是一种用于构建富客户端应用程序的开发框架,它提供了丰富的UI控件和布局管理器,以及用于处理用户交互的事件和动画等功能。在JavaFX中,我们可以使用弹出框(Dialog)来实现用户与应用程序之间的交互,例如显示错误信息、确认操作等。

弹出框的基本用法

JavaFX中的弹出框是通过javafx.scene.control.Dialog类来实现的。下面是一个简单的示例代码,演示了如何创建一个基本的弹出框并显示出来。

import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DialogExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Button showDialogButton = new Button("Show Dialog");
        showDialogButton.setOnAction(event -> showDialog());
        root.getChildren().add(showDialogButton);

        primaryStage.setScene(new Scene(root, 200, 200));
        primaryStage.show();
    }

    private void showDialog() {
        Alert alert = new Alert(Alert.AlertType.INFORMATION);
        alert.setTitle("Information Dialog");
        alert.setHeaderText("This is an information dialog");
        alert.setContentText("Hello, this is a sample dialog!");

        alert.showAndWait();
    }

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

在上面的示例中,我们创建了一个VBox布局容器,并在其中放置了一个按钮。当按钮被点击时,会调用showDialog方法显示一个弹出框。在showDialog方法中,我们创建了一个Alert对象,并设置其类型为AlertType.INFORMATION,这表示这是一个信息弹出框。然后,我们设置了弹出框的标题、头部文本和内容文本,并调用showAndWait方法显示弹出框。

运行上面的代码,点击按钮后,会弹出一个信息弹出框,显示指定的标题、头部文本和内容文本。

弹出框的类型

JavaFX提供了不同类型的弹出框,用于显示不同的信息或进行不同的交互。下面是常用的弹出框类型及其用法:

  • AlertType.NONE:不显示图标的弹出框,一般用于自定义弹出框的样式。
  • AlertType.INFORMATION:显示信息图标的弹出框,用于显示一般的信息。
  • AlertType.WARNING:显示警告图标的弹出框,用于显示警告信息。
  • AlertType.ERROR:显示错误图标的弹出框,用于显示错误信息。
  • AlertType.CONFIRMATION:显示确认图标的弹出框,用于确认用户的操作。

除了设置弹出框的类型,我们还可以设置弹出框的按钮类型,例如确定、取消等。下面是一个示例代码,演示了如何创建一个确认弹出框,并处理用户的选择。

import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ConfirmationDialogExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Button showConfirmationButton = new Button("Show Confirmation Dialog");
        showConfirmationButton.setOnAction(event -> showConfirmationDialog());
        root.getChildren().add(showConfirmationButton);

        primaryStage.setScene(new Scene(root, 200, 200));
        primaryStage.show();
    }

    private void showConfirmationDialog() {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
        alert.setTitle("Confirmation Dialog");
        alert.setHeaderText("Do you want to proceed?");
        alert.setContentText("Please confirm your choice.");

        ButtonType okButton = new ButtonType("OK");
        ButtonType cancelButton = new ButtonType("Cancel");

        alert.getButtonTypes().setAll(okButton, cancelButton);

        Optional<ButtonType> result = alert.showAndWait();
        if (result.isPresent() && result.get() == okButton) {
            System.out.println("User clicked OK");
        } else {
            System.out.println("User clicked Cancel");
        }
    }

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