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 自定义控件

javafx 自定义控件_JavaFX技巧10:自定义复合控件相关推荐

  1. javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第2部分

    javafx 自定义控件 自从我开始创建Nest恒温器FX自定义控件以来,已经有一段时间了! 因此,上次,正如Gerrit Grunwald所建议的那样,我花了一些时间使用inkscape复制Nest ...

  2. javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第1部分

    javafx 自定义控件 几周前,由于Hendrik Ebbers的出色文章 ,我决定花一些时间观看有关JavaFX的JavaOne讨论. 我不得不说我已经学到了很多东西,只是看这些视频(即使我还没有 ...

  3. javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第3部分

    javafx 自定义控件 嗨,经过与同事的讨论,我今天决定展示css方法并不是唯一可用于创建自定义控件的方法. 当然,它允许提供一些外观扩展点,但是可以使用代码API使用相同的方法(与向JavaFX的 ...

  4. javafx 图标_JavaFX技巧32:需要图标吗? 使用Ikonli!

    javafx 图标 动机 自2013年以来,我一直在编写JavaFX应用程序和库的代码,它们的共同点是,我需要找到可以用于它们的良好图标/图形. 作为前Swing开发人员,我首先使用图像文件,GIF或 ...

  5. javafx 遮罩_JavaFX技巧31:遮罩/剪切/ Alpha通道

    javafx 遮罩 选择条 最近,我不得不实现一个自定义控件,该控件使用户可以从项目列表中选择一个项目. 此" SelectionStrip"控件必须水平放置项目,并且在项目过多的 ...

  6. javafx阴影_JavaFX技巧来节省内存! 属性和可观察对象的阴影场

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

  7. javafx属性_JavaFX技巧11:更新只读属性

    javafx属性 自定义控件通常具有"只读"属性. 这意味着不能从控件外部进行设置,甚至不能从自己的皮肤类别进行设置. 通常,控件的行为会导致更改只读属性. 在JavaFX中,此行 ...

  8. javafx 教程_JavaFX技巧32:需要图标吗? 使用Ikonli!

    javafx 教程 动机 自2013年以来,我一直在编写JavaFX应用程序和库的代码,它们的共同点是,我需要找到可以用于它们的良好图标/图形. 作为前Swing开发人员,我首先使用图像文件,GIF或 ...

  9. javafx阴影_JavaFX技巧23:节省内存! 属性的阴影场

    javafx阴影 Java 8中引入的属性和属性绑定是非常有用的编程概念. 当您开发用户界面时,它们特别有用. 实际上,它们是如此有用,以至于开发人员成为所有事物都应该是属性而不是原始属性的想法的受害 ...

最新文章

  1. python-pcl官网 应用、特征、过滤Filter教程翻译
  2. 了解大数据的特点、来源与数据呈现方式
  3. winhttp get 实例_实例|CASS的绘制的航道断面,怎么多了两个边沟? 135
  4. mysql select 区分大小写,MySql查询不区分大小写解决方案(两种)
  5. Java 11:新的HTTP客户端API
  6. 微信小程序 高德地图知道两点求道路_微信小程序——计算2点之间的距离
  7. 小米商城项目解析(完)
  8. 《锋利的jQuery》笔记 第2章 jQuery选择器
  9. 扩展模块已停止工作怎么解决_菲尼克斯Phoenix控制器电源模块维修检测免费
  10. PHP小白之路1--PHP之简易留言板设计
  11. LVS配合piranha安装使用
  12. zigbee CC2530 系列教程 8 AD采集内部温度实验
  13. 第三届火焰杯软件测试初赛题目
  14. 2022全年度平板电视十大热门品牌销量榜单
  15. 各代iPhone iPad 内部代号
  16. (记录)绝对值的实现
  17. 2021年6月大学英语六级翻译
  18. 京东成都研究所奋战618
  19. rust沙河游戏_Steam上最热销的十款沙盒游戏!好玩的都在这了!
  20. K均值算法【K-means】

热门文章

  1. P2672-推销员【贪心】
  2. 2725. [Violet 6]故乡的梦(删边最短路同[TJOI2012]桥)
  3. codeforces 932E Team Work 高等数学求导、dp
  4. Nacos(十)之Kubernetes Nacos
  5. JavaFX官方教程(十三)之应用效果
  6. 漫画:什么是冒泡排序
  7. MyBatis中多表查询(业务代码方式)
  8. 看了通信领域中信息的处理的三种方式我终于知道电报能发送信息的原理了
  9. 量子计算机对人类长寿,科学家称“极端长寿”在未来几十年可能会达到新的里程碑...
  10. python下面的代码_解析一下下面的python代码?