JavaFX对话框控件-ChoiceDialog

  • 与Alert大部分功能类似
  • 按钮不可以自定义
  • 多一个下拉框
    在这里插入图片描述

常用属性

title

弹出框标题,标题太长会把超长部分截取,后面加上……

dialog.setTitle("标题");

contentText

弹出框内容,内容太多,不会被截取,会把弹出框撑变形

dialog.setContentText("内容信息");

initOwner

设置弹框的所有者,用于确定对话框的位置和模式

dialog.initOwner(stage);

graphic

设置弹出框的小图标,否则会采用AlertType默认图标

dialog.setGraphic(new ImageView("icon.png"));

headerText

设置弹框的头部信息,否则会使用AlertType默认信息

dialog.setHeaderText("headerText信息");

defaultValue

弹框中下拉框的默认值,通过构造方法赋值

ChoiceDialog<String> dialog = new ChoiceDialog<String>("选项2", "选项1", "选项2", "选项3", "选项4");

// 设置选择值
dialog.setSelectedItem("选项3");
// 获取默认值
dialog.getDefaultChoice();

choices

弹框中下拉框选项值,通过构造方法赋值

ChoiceDialog<String> dialog = new ChoiceDialog<String>("选项2", "选项1", "选项2", "选项3", "选项4");

dialogPane

获取 Alert 的内部 DialogPane,允许进一步定制对话框的布局和内容,其中最重要的是expandableContent

TextArea textArea = new TextArea("展开显示详细内容");
textArea.setEditable(false);
textArea.setWrapText(true);
textArea.setMaxWidth(Double.MAX_VALUE);
textArea.setMaxHeight(Double.MAX_VALUE);
dialog.getDialogPane().setExpandableContent(textArea);

常用事件

显示事件setOnShowing

dialog.setOnShowing((e) -> {
    System.out.println(e.getEventType() + " ->" + e.getSource().getClass() + " -> " + e.getTarget().getClass());
});

显示事件setOnShown

dialog.setOnShown((e) -> {
   System.out.println(e.getEventType() + " ->" + e.getSource().getClass() + " -> " + e.getTarget().getClass());
});

弹框按钮点击

Optional<String> optional = dialog.showAndWait();
System.out.println(optional.orElse("无"));

综合案例

    public static Parent demo1(Window owner) {
        FlowPane flowPane = new FlowPane();
        flowPane.setHgap(10);
        flowPane.setVgap(10);
        flowPane.setOrientation(Orientation.VERTICAL);
        Button button1 = new Button("demo1");
        button1.setOnMouseClicked((event) -> {
            if (MouseButton.PRIMARY.equals(event.getButton())) {
                ChoiceDialog<String> dialog = new ChoiceDialog<String>("选项2", "选项1", "选项2", "选项3", "选项4");
                dialog.initOwner(owner);
                dialog.setTitle("title信息");
                dialog.setHeaderText("headerText信息");
                dialog.setContentText("请选择:");
                dialog.setGraphic(new ImageView("icon.png"));

                TextArea textArea = new TextArea("展开显示详细内容");
                textArea.setEditable(false);
                textArea.setWrapText(true);
                textArea.setMaxWidth(Double.MAX_VALUE);
                textArea.setMaxHeight(Double.MAX_VALUE);
                dialog.getDialogPane().setExpandableContent(textArea);
                dialog.setOnShowing((e) -> {
                    System.out.println(e.getEventType() + " ->" + e.getSource().getClass() + " -> " + e.getTarget().getClass());
                });
                dialog.setOnShown((e) -> {
                    System.out.println(e.getEventType() + " ->" + e.getSource().getClass() + " -> " + e.getTarget().getClass());
                });
                Optional<String> optional = dialog.showAndWait();
                System.out.println(optional.orElse("无"));
            }
        });
        flowPane.getChildren().add(button1);
        return flowPane;
    }

自定义下拉框内容

目前自带的只能是一个纯文本,目前ChoiceDialog没有提供对内部ComboBox的自定义操作方案,我们可以通过反射方式来处理

Field field = ChoiceDialog.class.getDeclaredField("comboBox");
field.setAccessible(true);
ComboBox comboBox = (ComboBox) field.get(dialog);
comboBox.setCellFactory(param -> new ListCell<String>() {
   @Override
   protected void updateItem(String txt, boolean empty) {
       super.updateItem(txt, empty);
       if (empty || txt == null) {
           setGraphic(null);
       } else {
           VBox vBox = new VBox();
           vBox.setPadding(new Insets(5, 2, 2, 5));
           vBox.getChildren().addAll(new Text("测试->" + txt));
           setGraphic(vBox);
       }
   }
});
JavaFX提供了许多对话框类型,包括警告对话框、错误对话框、确认对话框、文本输入对话框等等。这些对话框都是通过JavaFXDialog类创建的。 下面是一个简单的示例代码,展示了如何创建一个警告对话框: ```java Alert alert = new Alert(AlertType.WARNING); alert.setTitle("警告对话框"); alert.setHeaderText("警告内容"); alert.setContentText("这是一个警告信息"); alert.showAndWait(); ``` 在这个例子中,我们首先创建了一个Alert对象,并将其类型设置为WARNING。然后设置对话框的标题、头部信息和内容。最后调用showAndWait()方法来显示对话框。 除了警告对话框,还可以创建其他类型的对话框。例如,要创建一个确认对话框,可以将Alert的类型设置为CONFIRMATION,并设置对话框的标题、头部信息和内容。然后,可以使用showAndWait()方法来显示对话框,并根据用户的响应来进行相应的操作。 ```java Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle("确认对话框"); alert.setHeaderText("确认内容"); alert.setContentText("您确认要执行此操作吗?"); Optional<ButtonType> result = alert.showAndWait(); if (result.get() == ButtonType.OK){ // 用户点击了“确认”按钮 } else { // 用户点击了“取消”按钮 } ``` 在这个例子中,我们使用了一个Optional<ButtonType>类型的对象来存储用户的响应。如果用户点击了“确认”按钮,那么就可以执行相应的操作;如果用户点击了“取消”按钮,就不需要执行任何操作。 总的来说,JavaFX对话框功能非常强大,可以帮助我们方便地实现各种对话框的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值