对于MQTT.fx,我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码:

我发现在ToggleGroup的上下文中,ToggleButton在选择/取消选择方面的行为与RadioButtons不同:与RadioButtons不同,ToggleButtons仍可以设置为未选中状态。

RadioButton扩展了ToggleButton并覆盖了fire()(当用户手势指示该ButtonBase的事件应该又称为“单击按钮”时发生时,将调用此方法):
单选按钮:

@Override public void fire() {// we don't toggle from selected to not selected if part of a groupif (getToggleGroup() == null || !isSelected()) {super.fire();}
}

切换按钮:

@Override public void fire() {setSelected(!isSelected());fireEvent(new ActionEvent());
}

在ToogleGroup中,ToggleButton的行为应类似于RadioButtons,所以恕我直言,这是一个值得对ToggleButton��进行拉取请求的错误。

解决此问题的一种方法是确保创建一个ToggleButton的自定义扩展,以实现与RadioButton有关的fire()。
但是我更喜欢将行为添加到现有控件中。
这是我的修改方式,可以通过向使用了不需要的MouseEvent的ToggleGroup的所有ToogleButtons添加过滤器来修改默认行为:

public class JavaFXUtil {private static JavaFXUtil me;private JavaFXUtil() {}public static JavaFXUtil get() {if (me == null) {me = new JavaFXUtil();}return me;}public EventHandler<MouseEvent> consumeMouseEventfilter = (MouseEvent mouseEvent) -> {if (((Toggle) mouseEvent.getSource()).isSelected()) {mouseEvent.consume();}};public void addAlwaysOneSelectedSupport(final ToggleGroup toggleGroup) {toggleGroup.getToggles().addListener((Change<? extends Toggle> c) -> {while (c.next()) {for (final Toggle addedToggle : c.getAddedSubList()) {addConsumeMouseEventfilter(addedToggle);}}});toggleGroup.getToggles().forEach(t -> {addConsumeMouseEventfilter(t);});}private void addConsumeMouseEventfilter(Toggle toggle) {((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_PRESSED, consumeMouseEventfilter);((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_RELEASED, consumeMouseEventfilter);((ToggleButton) toggle).addEventFilter(MouseEvent.MOUSE_CLICKED, consumeMouseEventfilter);}}
public class ButtonDemoController {@FXMLprivate ToggleGroup g2;@FXMLprivate ToggleGroup g3;public void initialize() {JavaFXUtil.get().addAlwaysOneSelectedSupport(g2);JavaFXUtil.get().addAlwaysOneSelectedSupport(g3);}}

GitHub上的示例代码。

翻译自: https://www.javacodegeeks.com/2016/04/button-choice-use-togglebuttons-radiobuttons.html

选择的按钮:将ToggleButtons用作单选按钮相关推荐

  1. 单选按钮:after_选择的按钮:将ToggleButtons用作单选按钮

    单选按钮:after 对于MQTT.fx,我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码: 我发现在ToggleGroup的上下文中,ToggleButton在选择/取消选择 ...

  2. webuploader在bootstrap模态对话框中选择文件按钮无效的问题

    搜了很多,网上主要的说法是 当一个元素是hidden时,addbutton绑定是会失败的,所以单击选择文件按钮就无效了 而bootstrap模态框一开始是隐藏的,因此必须在其显示完毕后才可以初始化we ...

  3. WIndows10系统解决“选择电源按钮的功能”中没有休眠选项

    这是我之前遇到过一个很绝的问题,用过休眠的都知道好用,但是在我有一次更新了Windows系统后本来设置好的休眠选项就没有了,就连设置的"选择电源按钮的功能"也没有这个选项,就是这个 ...

  4. php按钮打开文件选择框,在Select file(选择)页面单击Select file(选择文件)按钮

    第1步,运行WordFix,并单击"Start(开始)"按钮,如图所示. 第2步,进入Word文档恢复向导,在"Select file(选择)"页面单击&quo ...

  5. 用java的事件监听机制实现一个简单的画板应用:通过选择图形按钮和颜色按钮来画出自己想画的图形:直线、空心矩形、圆形、折线、多边形、圆角矩形、弧线、曲线、喷枪

    今天做一个简单的画板,完整代码附在文章末尾处. - 功能:通过选择图形按钮和颜色按钮来画出自己想画的图形. - 界面展示: - 思路: 1.做一个可视化界面:创建JFrame对象,并设置Title.S ...

  6. win10休眠按钮在“选择电源按钮功能”配置中找不到

    问题: Win10 想开启休眠模式,当按照常规设置,在"选择电源按钮功能"配置界面,却没有找到 可勾选的"休眠"按钮[见参考]. 解决: 1.    点WIND ...

  7. 选择屏幕——按钮、单选复选框

    12.6.     按钮.单选复选框.下拉框的FunCode 如果复选框与单选按钮没有设置Function Code,则它们就会像普通的输入框一样,即使状态发生了改变,也不会触发PAI事件 对话屏幕中 ...

  8. JQuery/JS select标签动态设置选中值、设置禁止选择 button按钮禁止点击 select获取选中值...

    //**1.设置选中值:(根据索引确定选中值)**// var osel=document.getElementById("selID"); //得到select的IDvar op ...

  9. 隐藏标准选择界面按钮

    适用于更改报表标准选择界面的GUI状态(GUI_STATUS ),或者隐藏标准GUI状态的某些按钮. 比如,要隐藏执行和保存变式按钮. 隐藏前: 隐藏后: 还可以添加自己的按钮: 程序:

最新文章

  1. VUE 事件获取当前组件的属性
  2. WinCE文件目录定制
  3. 【LeetCode从零单排】No102 Binary Tree Level Order Traversal
  4. 如何重置云服务器系统
  5. 测试Spring Boot有条件的合理方式
  6. 怎么用PHP修改文字大小,如何利用PHP和CSS改变网页文字大小
  7. linux 内核系统优化,Linux高并发应用类型对系统内核的优化
  8. 利用Javascript判断操作系统的类型
  9. js动态创建元素和删除
  10. (libgdx学习)Continuous non continuous rendering
  11. 【Android】Lenovo K860 framework-res.apk回编译失败解决办法
  12. 造假家族覆灭记:警方联合阿里斩断涉案三千万假耐克产销链
  13. android 计步功能原理,Android开发——计步功能
  14. 计算机网络智能小区综合分布线系统的总结,智能楼宇综合布线的系统设计方案.doc...
  15. TCP交互式游戏《基于TCP的C/S程序设计》
  16. linux ubantu最新版本,过去十年最佳的Ubuntu版本
  17. Warning: To load an ES module, set “type“: “module“ in the package.json or use the .mjs extension.
  18. 小米android通知栏图标不显示,MIUI开发版更新:已修复原生样式下部分通知图标不显示的问题...
  19. input range: vue自定义进度条
  20. 蓝桥杯--历届真题 最优包含【第十届】【决赛】【B组】

热门文章

  1. jstl中添加自定义的函数
  2. 19级:班级日常分享,一天一瞬间
  3. 深入C#中的String类
  4. ssh(Spring+Spring mvc+hibernate)——EmpServiceImpl.java
  5. 2017蓝桥杯省赛---java---B---9(分巧克力)
  6. 2018蓝桥杯省赛---java---B---2(方格计数)
  7. win10系统excel2019单元格显示完整的年月日时分秒设置方法
  8. Java内存区域(运行时数据区域)和内存模型(JMM)
  9. 微信小程序定时器setInterval()的使用注意事项
  10. hibernate教程_Hibernate多对多教程