JavaFX中对话框的显示实例

举报
Jet Ding 发表于 2021/07/23 10:35:33 2021/07/23
【摘要】 信息对话框:       Alert alert = new Alert(Alert.AlertType.INFORMATION);       alert.setTitle("Information Dialog");       alert.setHeaderText("Information Dialog");       alert.setContentText("Test Mess...

信息对话框:

       Alert alert = new Alert(Alert.AlertType.INFORMATION);
       alert.setTitle("Information Dialog");
       alert.setHeaderText("Information Dialog");
       alert.setContentText("Test Message");

       alert.showAndWait();

78.png



警告对话框

        Alert alert = new Alert(AlertType.WARNING);
        alert.setTitle("Warning Dialog");
        alert.setHeaderText("Warning Dialog");
        alert.setContentText("Warning");
        alert.showAndWait();


79.png

错误对话框

        Alert alert = new Alert(AlertType.ERROR);
        alert.setTitle("Error Dialog");
        alert.setHeaderText("Error Dialog");
        alert.setContentText("Error");
        alert.showAndWait();


80.png

异常对话框


        Alert alert = new Alert(AlertType.ERROR);
        alert.setTitle("Exception Dialog");
        alert.setHeaderText("Exception Dialog");
        alert.setContentText("Exception");
        Exception ex = new FileNotFoundException("Exception");

        // Create expandable Exception.
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        ex.printStackTrace(pw);
        String exceptionText = sw.toString();

        Label label = new Label("The exception stacktrace was:");

        TextArea textArea = new TextArea(exceptionText);
        textArea.setEditable(false);
        textArea.setWrapText(true);

        textArea.setMaxWidth(Double.MAX_VALUE);
        textArea.setMaxHeight(Double.MAX_VALUE);
        GridPane.setVgrow(textArea, Priority.ALWAYS);
        GridPane.setHgrow(textArea, Priority.ALWAYS);

        GridPane expContent = new GridPane();
        expContent.setMaxWidth(Double.MAX_VALUE);
        expContent.add(label, 00);
        expContent.add(textArea, 01);

        // Set expandable Exception into the dialog pane.
        alert.getDialogPane().setExpandableContent(expContent);

        alert.showAndWait();


81.png

82.png

确认对话框


        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.setTitle("Confirmation Dialog");
        alert.setHeaderText("Confirmation Dialog");
        alert.setContentText("Are you ok?");

        Optional<ButtonTyperesult = alert.showAndWait();
        if (result.get() == ButtonType.OK) {
            System.out.print("OK");
        } else {
            System.out.print("Cancel");
        }


83.png


使用自定义按钮的确认对话框


        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.setTitle("Confirmation Dialog");
        alert.setHeaderText("Confirmation Dialog");
        alert.setContentText("Choose one:");
        ButtonType buttonTypeOne = new ButtonType("One");
        ButtonType buttonTypeTwo = new ButtonType("Two");
        ButtonType buttonTypeThree = new ButtonType("Three");
        ButtonType buttonTypeCancel = new ButtonType("Cancel"ButtonData.CANCEL_CLOSE);

        alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo, buttonTypeThree, buttonTypeCancel);

        Optional<ButtonTyperesult = alert.showAndWait();
        if (result.get() == buttonTypeOne) {
            System.out.print("buttonTypeOne");
        } else if (result.get() == buttonTypeTwo) {
            System.out.print("buttonTypeTwo");
        } else if (result.get() == buttonTypeThree) {
            System.out.print("buttonTypeThree");
        } else {
            System.out.print("Cancel");
        }


84.png


文字输入对话框

        TextInputDialog dialog = new TextInputDialog("Name");
        dialog.setTitle("Text Input Dialog");
        dialog.setHeaderText("Text Input Dialog");
        dialog.setContentText("Please enter your name:");

        Optional<Stringresult = dialog.showAndWait();
        result.ifPresent(name -> System.out.println("Your name: " + name));


85.png




选择对话框


        List<Stringchoices = new ArrayList<>();
        choices.add("a");
        choices.add("b");
        choices.add("c");

        ChoiceDialog<Stringdialog = new ChoiceDialog<>("b", choices);
        dialog.setTitle("Choice Dialog");
        dialog.setHeaderText("Choice Dialog");
        dialog.setContentText("Choose your option:");
        Optional<Stringresult = dialog.showAndWait();
        result.ifPresent(option -> System.out.println("Your choice: " + option));
 


86.png


自定义的登录对话框


        Dialog<Pair<StringString>> dialog = new Dialog<>();
        dialog.setTitle("Login Dialog");
        dialog.setHeaderText("Login Dialog");

        ImageView imageView = new ImageView(this.getClass().getResource("/login.png").toString());
        imageView.setFitWidth(50);
        imageView.setFitHeight(50);
        dialog.setGraphic(imageView);

        ButtonType loginButtonType = new ButtonType("Login"ButtonData.OK_DONE);
        dialog.getDialogPane().getButtonTypes().addAll(loginButtonType, ButtonType.CANCEL);

        GridPane grid = new GridPane();
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(201501010));

        TextField username = new TextField();
        username.setPromptText("Username");
        PasswordField password = new PasswordField();
        password.setPromptText("Password");

        grid.add(new Label("Username:"), 00);
        grid.add(username, 10);
        grid.add(new Label("Password:"), 01);
        grid.add(password, 11);

        Node loginButton = dialog.getDialogPane().lookupButton(loginButtonType);
        loginButton.setDisable(true);

        username.textProperty().addListener((observable, oldValue, newValue) -> {
            loginButton.setDisable(newValue.trim().isEmpty());
        });

        dialog.getDialogPane().setContent(grid);

        Platform.runLater(() -> username.requestFocus());

        dialog.setResultConverter(dialogButton -> {
            if (dialogButton == loginButtonType) {
                return new Pair<>(username.getText(), password.getText());
            }
            return null;
        });

        Optional<Pair<StringString>> result = dialog.showAndWait();

        result.ifPresent(usernamePassword -> {
            System.out.println("Username=" + usernamePassword.getKey() + ", Password=" + usernamePassword.getValue());
        });

87.png



修改主程序左上角的图标

        Stage stage = (Stage) dialog.getDialogPane().getScene().getWindow();
        stage.getIcons().add(new Image(this.getClass().getResource("/login.png").toString()));

88.png



隐藏左上角图标

        dialog.initStyle(StageStyle.UTILITY);

89.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。