用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技巧10:自定义复合控件相关推荐

  1. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板

    写在之前 Shader变体.Shader属性定义技巧.自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用 ...

  2. Kotlin技巧与自定义语法糖

    Kotlin技巧与自定义语法糖 kotlin,ktx,anko kotlin官方中文站:http://www.kotlincn.net/docs/reference/basic-syntax.html ...

  3. JavaFX技巧来节省内存! 属性和可观察物的阴影场

    在 JavaFX的世界中, Properties API允许UI开发人员将值绑定到UI控件. 这种功能非常容易,但是当对象模型经常使用属性时,应用程序可能会很快耗尽内存. 我通常会编写两个单独的对象, ...

  4. android:layout_margin真实含义 及 自定义复合控件 layout()执行无效的问题解决

    一.关于layout_margin 搞Android时间也不短了,对layout_margin也不陌生了,可最近遇到一个问题让我发现,对它的认识还不够深入全面.大量网络资料上都说,layout_mar ...

  5. 我的世界服务器自定义翅膀,我的世界1.7.10自定义翅膀MOD

    <我的世界>1.7.10自定义翅膀mod的确很有意思,玩家们在游戏中可以按Y键就能够选择自己喜欢的翅膀和颜色了,而且这个mod中所有的翅膀都配有动画效果,非常漂亮,美丽动人,喜欢的玩家们快 ...

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

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

  7. JavaFX技巧17:带有AnchorPane的动画工作台布局

    最近,我不得不为应用程序实现一个布局,其中可以根据用户是否登录来隐藏或通过滑入/滑出动画显示或显示菜单区域和状态区域. 以下视频显示了实际的布局: 在过去,我可能会使用自定义控件和自定义布局代码来实现 ...

  8. asp 表格渐变颜色_加班到半夜,同事却用WPS表格小技巧10分钟搞定工作!

    表格天天都在用,遇到表格难题的时候,你们心里的OS是不是:我是谁?我在哪儿?咋这么多让人一头雾水的问题?Excel实在是太难了太难了! 不瞒你们说,其实稻壳君曾经也深受其扰. 不会使用表格给我们带来了 ...

  9. 日常生活小技巧 -- CSDN自定义博客栏目

    参看:玩转CSDN之自定义博客栏目 参看:html颜色代码 自定义CSDN的博客栏目,无非就是HTML 贴图:<img src="图片地址">加入连接:<a hr ...

最新文章

  1. linux 类似winscp_mac如何连接远程linux,类似windows上的putty和winscp
  2. centos 6.x 升级内核
  3. python 迷宫边界,用python解决迷宫
  4. TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
  5. 怎么删除github上的仓库?
  6. 继承之接口知识点和思考练习
  7. php把时间戳改为时间格式,php怎么把时间格式转换为时间戳?
  8. Allegro 使用技巧
  9. python爬虫实现大麦抢票_爬虫 大麦网
  10. GPS测量误差来源分析
  11. EXECUTE IMMEDIATE用法小结
  12. 计算机的基本知识理论,计算机基本理论基础知识总汇
  13. POJ 1625 Censored! (AC自动机 + 高精度 + DP)
  14. 服务器装机选哪个系统好,服务器该装08系统好还是03系统好?
  15. Unity 导航系统Navigation
  16. 【数据结构】 实现 堆 结构 ---超细致解析
  17. 使用WinDbg Preview解决Win10系统蓝屏问题
  18. java读取带格式word文档_Java读取word文档解决方案
  19. 大学应用计算机二级,大学计算机二级ps考试试题内容(3)
  20. 学习Python的基础,Python的数据类型和变量

热门文章

  1. mysql使用游标的访问过程_mysql存储过程中使用游标的实例_MySQL
  2. 车联网 python_利用百度车联网提供的天气查询接口用python查询天气信息
  3. 转:使用 Tkprof 分析 ORACLE 跟踪文件
  4. 琥珀ai_琥珀项目:Java的未来暴露
  5. java向后兼容吗_Java向后不兼容历史的观察
  6. java ee架构_与Java EE和Spring的集成架构
  7. 请使用复选框选择_使用可选是可选的
  8. unity创建和销毁对象_如何创建和销毁对象
  9. gradle 构建应用流程_使用Gradle构建和应用AST转换
  10. 您是否尝试过MicroProfile Starter?