javafx 自定义控件_JavaFX技巧10:自定义复合控件

javafx 自定义控件

用JavaFX编写自定义控件是一个简单直接的过程。 需要一个控件类来控制控件的状态(因此命名)。 外观需要控件的外观。 而且通常不是用于自定义外观CSS文件。

控件的一种常见方法是将其正在使用的节点隐藏在其外观类中。 例如, TextField控件使用javafx.scene.text.Text的两个实例。 一个用于常规文本,一个用于提示文本。 这些节点不能通过TextField API访问。 如果要获取对它们的引用,则需要在Node上调用lookup(String)方法。 到目前为止,一切都很好。 实际上,很难想到您实际上需要访问Text节点的用例。

但…

如果您开发复杂的自定义控件,那就完全不一样了。 FlexGanttFX Gantt图表框架就是一个示例。 GanttChart控件由许多其他复杂控件组成,并且遵循“ 关注点分离 ”的原则,这些控件包含所有与它们正常工作相关的方法和属性。 如果这些控件隐藏在甘特图的外观内,则将无法访问它们,并且甘特图控件将需要实现大量的委托方法。 这将完全使甘特图API混乱。 因此, GanttChart类确实为其子控件提供了访问器方法,甚至提供了用于创建子节点的工厂方法。

以下屏幕快照显示了我当前正在为ControlsFX项目使用的新控件 。 我称之为ListSelectionView ,它具有两个ListView实例。 用户可以通过双击项目或使用中间的按钮将项目从一个列表移动到另一个列表。

列表选择视图


列表视图是复杂的控件。 他们有自己的数据和选择模型,他们自己的单元工厂,他们触发事件等等。 所有这些事情我们都可能想要自定义或聆听。 如果视图隐藏在皮肤类中,则很难做。 解决方案是通过受保护的工厂方法在控件类内部创建列表视图,并提供访问器方法。

以下代码片段显示了可以使用的模式:

public class ListSelectionView<T> extends Control {private ListView<T> sourceListView;private ListView<T> targetListView;public ListSelectionView() {sourceListView = createSourceListView();targetListView = createTargetListView();}protected ListView<T> createSourceListView() {return new ListView<>();}protected ListView<T> createTargetListView() {return new ListView<>();}public final ListView<T> getSourceListView() {return sourceListView;}public final ListView<T> getTargetListView() {return targetListView;}
}

工厂方法可用于创建标准ListView实例并在此处配置它们,或者返回已经存在的ListView专业化实例。 一家名为ACME的公司可能已经提供了一套标准的控件(实现了公司的营销理念)。 然后,工厂方法可能会返回一个名为ACMEListView的控件。

翻译自: https://www.javacodegeeks.com/2014/07/javafx-tip-10-custom-composite-controls.html

javafx 自定义控件

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

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

相关文章

虚拟机与容器 的 区别

VM和容器都可以帮助您充分利用可用的计算机硬件和软件资源。容器是块中的新孩子&#xff0c;但VM已经并且将继续在各种规模的数据中心中非常受欢迎。 如果您正在寻找在云中运行自己的服务的最佳解决方案&#xff0c;您需要了解这些虚拟化技术&#xff0c;它们如何相互比较&…

thymeleaf片段使用_Thymeleaf –片段和angularjs路由器局部视图

thymeleaf片段使用百里香叶许多很酷的功能之一就是能够渲染模板片段–我发现这是与AngularJs一起使用的特别有用的功能。 可以将AngularJS $ routeProvider或AngularUI路由器配置为返回不同“路径”的部分视图&#xff0c;使用百里香叶返回这些部分视图确实效果很好。 考虑一…

经典 Linux 协议栈——网络子系统

目录&#xff1a; 1.Linux网络子系统的分层 2.TCP/IP分层模型 3.Linux 网络协议栈 4.Linux 网卡收包时的中断处理问题 5.Linux 网络启动的准备工作 6.Linux网络包&#xff1a;中断到网络层接收 7.总结 Linux网络子系统的分层 Linux网络子系统实现需要&#xff1a; l …

Java和JavaScript之间的区别

1.简介 我们将在本文中比较Java语言和JavaScript语言。 JavaScript由Netscape开发。 它最初是用于客户端的脚本语言&#xff0c;后来又用作客户端和服务器脚本的语言。 Java由James Gosling由Sun Microsystems开发。 这些天来&#xff0c;JavaScript在服务器中以node.js的形式使…

《汇编语言》王爽实验DOS 环境 Win10 配置

下载这两个软件。 软件链接百度网盘 请输入提取码 提取码: y1j4 1. 将debug.exe放入一个文件夹中&#xff0c;用英文名&#xff0c;不要用中文。 我这里放在E盘下的Debug文件夹。 2 然后安装DOSBox软件。 安装好后在其文件目录下找到DOSBox 0.74-3 Options.bat 打开这个文件&…

硒4 Alpha –期望什么?

硒4 Alpha-期望什么&#xff1f; 早在2018年8月&#xff0c;整个测试自动化社区就受到了一个重大新闻的打击&#xff1a;Selenium的创始成员Simon Stewart在班加罗尔Selenium会议上正式确认了Selenium 4的发布日期和一些重大更新。 世界最受欢迎的Web测试自动化框架的4.0版本计…

8. 字符串转换整数 (atoi) [2022.10.21]

题目链接&#xff1a; 8. 字符串转换整数 (atoi) 一 题意介绍 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串…

26. 删除有序数组中的重复项[2022.10.24]

题目链接力扣 难度&#xff1a;简单 一 题目大意 26. 删除有序数组中的重复项给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某…

hibernate jpa_JPA / Hibernate实体状态转换的初学者指南

hibernate jpa介绍 Hibernate将开发人员的思维方式从SQL语句转移到实体状态转换。 一旦由Hibernate主动管理实体&#xff0c;所有更改将自动传播到数据库。 操作域模型实体&#xff08;及其关联&#xff09;比编写和维护SQL语句容易得多。 如果没有ORM工具&#xff0c;则添加新…

STL容器----map

一 基本概念 1. map/multimap map/multimap属于关联式容器&#xff0c;底层结构是用二叉树实现。 其中所有元素都是pair, pair中第一个元素为key&#xff08;键值&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实值&#xff09;&#xff0…

Spring @RequestParam批注

介绍&#xff1a; Spring RequestParam批注可用于在处理程序方法中提取查询参数。 在本快速教程中&#xff0c;我们将学习其用法。 首先让我们展示一个API&#xff0c;该API返回具有给定名字和年龄的用户列表&#xff1a; RestController public class UserController {...Ge…

win10任务栏怎样居中win10任务栏居中设定教程

win11系统内置任务栏居中的设置项&#xff0c;但是win10系统没有&#xff0c;倘若win10顾客也想让自己的任务栏居中的话&#xff0c;应当怎样设置呢&#xff1f;你先撤销任务栏锁住&#xff0c;随后新建菜单栏。之后选定一个空白文件夹&#xff0c;之后任务栏就会发生两条竖杠&…

java与java ee_RxJava + Java8 + Java EE 7 + Arquillian =幸福

java与java ee微服务是一种体系结构样式&#xff0c;其中每个服务都实现为一个独立的系统。 他们可以使用自己的持久性系统&#xff08;尽管不是强制性的&#xff09;&#xff0c;部署&#xff0c;语言等。 由于系统由一个以上的服务组成&#xff0c;因此每个服务将与其他服务…

【PPT】折线线条怎么画?

大家晚上好~ 今天跟大家分享3种绘制折线线条的方法。在模仿PPT的时候发现没有折线形状&#xff0c;这可怎么好呢&#xff1f; 今天带来了3种快速制作折线线条的方式&#xff0c;让我们一起围观学习吧~ 方法1 形状布尔运算出折线线条 在PPT默认的形状里没有折线&#xff0c;那…

创建通用数组的问题

在这篇文章中&#xff0c;我们将介绍一篇全面的文章&#xff0c;其中介绍了创建通用数组的问题。 Java编程语言于2004年9月在Java 5.0“ Tiger”发行版中添加了泛型。 泛型或类型参数化系统在提供类型安全性的同时扩展了Java现有的类型系统。 1.简介 Java具有Collections Fram…

Citavi阅读PDF文件中目录位置

一般阅读pdf文件&#xff0c;如果文件内内嵌目录数据&#xff0c;可以根据目录&#xff0c;跳转到PDF文件的对应章节。 citavi也不例外 citavi调出目录章节位置如下图所示&#xff1a; 1. 点击左下方的搜索框 2. 点击目录标志 即可调出目录窗口

Ubuntu下命令行解析

Linux命令通常由以下三部分组成&#xff1a;Command [-option] [argument] 其中&#xff0c;命令为程序的名称。选项和参数可以省略 选项中one dash&#xff08;-&#xff09;与two dashes&#xff08;--&#xff09;区别 使用命令时常看到有时候为选项为-&#xff0c;有时候…

使用JMeter进行性能测试

在开发复杂的高可用性软件项目时&#xff0c;性能至关重要。 在当今这样的现代时代尤其如此&#xff0c;除了闪电般的快速访问实时数据之外&#xff0c;其他任何事情都受到惩罚。 当谈论有时需要的大量数据时&#xff0c;这并不总是一件容易的事。 在本文中&#xff0c;我们将…

Unix系统用户下载内容存放位置

1.Unix文件目录含义 首先注意usr 指 Unix System Resource&#xff0c;而不是User 然后通常&#xff1a; /usr/bin下面的都是系统预装的可执行程序&#xff0c;会随着系统升级而改变。 /usr/local/bin目录是给用户放置自己的可执行程序的地方&#xff0c;推荐放在这里&…

Linux depmod功能说明

Linux depmod 命令用于分析可载入模块的相依性。 depmod(depend module)可检测模块的相依性&#xff0c;供modprobe在安装模块时使用。 Linux modprobe命令用于自动处理可载入模块。 modprobe可载入指定的个别模块&#xff0c;或是载入一组相依的模块。modprobe会根据depmod…