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

单选按钮:after

对于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

单选按钮:after

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【技术解决方案】Windows平台下摄像头采集方案

在Windows下对摄像头数据进行采集&#xff0c;有两种方法。一种使用DrectShow&#xff0c;另一种方法是使用WMF。我们可以通过将以上两种方法与FFmpeg中的avdevice来关联。使得他们成为一个整体。对于本机摄像头设备的枚举我推荐使用QT的多媒体库。 QCameraInfo curCameraInfo …

【技术解决方案】开发工具源码安装包大全

汇总下载链接 下载地址 QT下载以及安装 各版本QT下载地址 1.安装中根据不同的开发环境勾选相应的&#xff0c;如果使用VS编译请先安装VS和SDK然后再安装QT。 使用VS时CDB调试支持需要勾选 QTCreator断点调试需要下载SDK,Windows的SDK下载地址&#xff0c;只需要安装勾选如…

垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器

垃圾收集算法,垃圾收集器StackOverflow问题查找正在运行哪种类型的垃圾收集 器&#xff0c;jvm的默认垃圾收集器 &#xff0c; 如何通过查看gc日志来查看正在运行的垃圾收集器&#xff1f; &#xff0c;以及如何知道HotSpot jvm的当前GC策略&#xff1f; 以及博客文章如何以编程…

python哪个方向简单_现在学Python,哪个方向最简单?哪个方向最吃香 ?

“ 我想学Python&#xff0c;但是学完Python后都能干啥 &#xff1f;”“ 现在学Python&#xff0c;哪个方向最简单&#xff1f;哪个方向最吃香&#xff1f;”“ …… ”相信不少Python的初学者&#xff0c;都会遇到上面的这些问题。大家都知道Python很吃香&#xff0c;薪资高、…

树与堆的基本概念

当看到这里的时候&#xff0c;相信你的链表&#xff0c;队列&#xff0c;栈学的也差不多可以了&#xff0c;那么接下来让我们一起进入树的学习吧&#xff01; 一.树的概念以及一些知识记忆 树的定义&#xff1a; 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08…

动态数据交换 python_如何用 Python 和 Streamlit 做交互式数据分析产品?

「本文参与少数派 2019 年度征文 效率有心得」不用学前端编程&#xff0c;你就能用 Python 简单高效写出漂亮的交互式 Web 应用&#xff0c;将你的数据分析成果立即展示给团队和客户。痛点从我开始折腾数据分析工具的那一天&#xff0c;就没有想明白一件事儿 —— 为什么我打算…

【技术解决方案】GitHub本地仓库管理与远程仓库管理

本地仓库管理 设置用户名 git config --global user.name CnYiXiaoNaiHe 设置邮箱 git config --global user.email 1969118063qq.com 该设置在Github仓库主页显示谁提交了该文件 创建新文件夹&#xff0c;打开&#xff0c;然后执行 git init 把文件从工作区提交到暂存…

jboss war包放哪_如何将JBoss HR Employee Rewards项目放入云端

jboss war包放哪我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 我们从头到尾讨论了各个层次&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应用程序开发工具。 到目前为止&am…

hotspot 垃圾收集器_HotSpot增量Java垃圾收集器

hotspot 垃圾收集器在我最近的博客文章“ 确定活动的HotSpot垃圾收集器”中 &#xff0c;我描述了可用于确定HotSpot JVM &#xff08;Java进程&#xff09;正在使用的垃圾收集器&#xff08;当从命令行参数&#xff08;标志&#xff09;中变得不明显时&#xff09;的不同方法。…

python聚类分析成绩反思_机器学习python实践——二分K-means聚类

说这算法之前的话&#xff0c;前期的准备工作&#xff0c;请看我前面的博客。上一篇&#xff0c;我说到了K-means聚类算法&#xff0c;但是有很多的不足&#xff0c;有很多能够改进的地方&#xff0c;例如&#xff0c;怎样使得聚类效果达到全局最优(可能的最好结果)呢&#xff…

apache spark_如何将自定义数据源集成到Apache Spark中

apache spark如今&#xff0c;流数据是一个热门话题&#xff0c;而Apache Spark是出色的流框架。 在此博客文章中&#xff0c;我将向您展示如何将自定义数据源集成到Spark中。 Spark Streaming使我们能够从各种来源流式传输&#xff0c;同时使用相同的简洁API访问数据流&#…

python采用函数编程模式_浅谈Python 函数式编程

匿名函数lambda表达式什么是匿名函数&#xff1f;匿名函数&#xff0c;顾名思义就是没有名字的函数&#xff0c;在程序中不用使用 def 进行定义&#xff0c;可以直接使用 lambda 关键字编写简单的代码逻辑。lambda 本质上是一个函数对象&#xff0c;可以将其赋值给另一个变量&a…

【安卓开发 】Android初级开发(一)控件通用属性

控件通用属性 match_parent 是指和父容器宽高相等的值&#xff0c;其他的同理可证。 android:layout_marginTop"XXXXXXdp" 距离顶部的距离 Android TextView属性详解 该控件相关属性 Android EditText属性大全 相关属性查看地址 事件监听处理 package com.examp…

dynamodb java_使用Java将项目插入DynamoDB表

dynamodb java在上一篇文章中&#xff0c;我们学习了如何使用Java创建DynamoDB表。 下一步是将项目插入到先前创建的DynamoDB表中。 请记住&#xff0c;对于插入操作&#xff0c;最基本的步骤是指定主键。 对于表用户&#xff0c;主键是属性电子邮件。 您可以根据需要添加任意…

成都python数据分析师职业技能_数据分析师需要什么技能,数据分析行业都有什么职业?...

就目前而言&#xff0c;很多人看到了数据分析行业的光明前景&#xff0c;于是就想进入数据分析的行业中&#xff0c;但是&#xff0c;想成为一名合格的数据分析师&#xff0c;需要掌握很多的技能&#xff0c;那么一名合格的数据分析师需要掌握哪些技能呢&#xff1f;现在的数据…

【安卓开发 】Android初级开发(零)各种布局

线性布局的重要属性 (LinearLayout) 相关属性链接 layout_width 和 layout_height是布局器相对于外部构件的一个宽高距离。 layout_margin是指与外部控件的整个边缘距离。 padding是指与控件的内边距离 android:orientation 方向作用于整个布局中的所有控件 android:layo…

jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件

jboss fuse 教程在本文中&#xff0c;我将展示如何在Apache Aries Blueprint xml文件中添加一些内联脚本。 我不一定会称其为最佳实践&#xff0c;但我一直有这样的想法&#xff1a;这种能力可能有用。 可能当我被迫使用xml来模拟命令式编程结构&#xff08;例如使用Apache An…

认证令牌_Java应用程序的令牌认证

认证令牌建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 2016年5月12日更新&#xf…

java package报错_Java基础知识总结 - 超详细篇(上)

1&#xff0c;JDK&#xff1a;Java Development Kit&#xff0c;java的开发和运行环境&#xff0c;java的开发工具和jre。2&#xff0c;JRE&#xff1a;Java Runtime Environment&#xff0c;java程序的运行环境&#xff0c;java运行的所需的类库JVM(java虚拟机)。3&#xff0c…

【安卓开发 】Android初级开发(二)Activity启动模式

Activity页面跳转在业务逻辑页面添加以下代码 //跳转到下一个activityIntent intent new Intent(this,MainActivity2.class);startActivity(intent); Activity四种启动模式 具体链接