当前位置: 首页 > news >正文

JavaFX对话框控件-ChoiceDialog

JavaFX对话框控件-ChoiceDialog

  • 常用属性
    • title
    • contentText
    • initOwner
    • graphic
    • headerText
    • defaultValue
    • choices
    • dialogPane
  • 常用事件
    • 显示事件setOnShowing
    • 显示事件setOnShown
    • 弹框按钮点击
  • 综合案例
    • 自定义下拉框内容

  • 与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>() {@Overrideprotected 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);}}
});
http://www.lryc.cn/news/420341.html

相关文章:

  • 一文了解BTC中的二层协议中Nervos network,CKB,RGB++,UTXO stack 之间的关系
  • Oracle(47)如何创建和使用集合?
  • SpringIOC和SpringAOC
  • static关键字详解
  • 使用 Java RestClient 与 Elasticsearch 进行索引管理的示例
  • 编程-设计模式 10:外观模式
  • 非范型ArrayList和泛型List<T>
  • 魔众文库系统v7.0.0版本推荐店铺功能,管理菜单逻辑优化
  • 03、流程控制语句
  • [Android] [解决]Bottom Navigation Views Activity工程带来的fragment底部遮盖的问题
  • Armv8/Armv9架构中的原子性
  • 读零信任网络:在不可信网络中构建安全系统15协议和过滤
  • C语言学习笔记 Day11(指针--中2)
  • Golang 并发编程
  • 【数据结构详解】——选择排序(动图详解)
  • 杂项命令(笔记)
  • 代码随想录算法训练营Day38||完全背包问题、leetcode 518. 零钱兑换 II 、 377. 组合总和 Ⅳ 、70. 爬楼梯 (进阶)
  • 超越链端:Web3的无边界技术革命
  • 127. Go反射基本原理
  • 提高PDF电子书的分辨率
  • Spring Cloud全解析:注册中心之zookeeper注册中心
  • 解决戴尔台式电脑休眠后无法唤醒问题
  • MySQL运维-分库分表
  • AGX orin硬件设计
  • AI大模型开发——2.深度学习基础(1)
  • go语言day22 gin-vue-admin全栈项目的依赖安装
  • PHP之docker学习笔记
  • 基于树莓派4B与STM32的UART串口通信实验(代码开源)
  • 【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
  • IIC协议