javafx阴影

Java 8中引入的属性和属性绑定是非常有用的编程概念。 当您开发用户界面时,它们特别有用。 实际上,它们是如此有用,以至于开发人员成为所有事物都应该是属性而不是原始属性的想法的受害者。 不幸的是,他们很容易忘记诸如SimpleLongProperty之类的属性比诸如Long的标准类型要大得多的对象。 当然,它们比诸如long的原始数据类型要大得多。

在我当前的项目之一中,客户端使用的每个模型对象几乎都是由属性组成的。 对于许多这些模型对象,这是正确的方法,因为它们将通过JavaFX控件进行编辑/修改。 但是,还有许多未编辑的模型对象。 它们的存在是为了支持FlexGanttFX控件中计划的呈现。 这些对象不需要被观察,因此它们不需要提供属性……但是它们这样做了,因为这样做,它们浪费了很多内存。

解决此问题的一种方法是重构模型类并摆脱所有属性,但是同样,我们可能想在以后的发行版中的不同上下文中使用这些对象,然后可能需要属性,因为我们要编辑它们直。 该怎么办?

Undertow场

解决这个问题的方法是我最近看到Gerrit Grunwald在其Medusa项目的代码中所做的事情,以及Properties先生本人Michael Heinrichs 所描述的一种模式 。 该模式使用的“影子字段”与属性中包装对象的类型相同。 使用此模式时,仅在确实需要时才创建属性(“有人请求时”)。

在此示例中,我们要管理一个名为“ title”的属性。 我们需要一个setter,一个getter和一个属性访问器。

private String _title = "Untitled"; // shadow fieldprivate StringProperty title;public final String getTitle() {title == null ? return _title : title.get();
}public final void setTitle(String newTitle) {if (title == null) {_title = newTitle;} else {title.set(newTitle);}
}public final StringProperty titleProperty() {if (title == null) {/// !!!! pass shadow field to constructortitle = new StringProperty(this, "title", _title);  }return title;
}

通过使用这种模式,我可以将项目中特定用例的内存占用空间从310 MB减少到250 MB。 保存的内存是我学生时计算机总内存的十倍。 想想看!

翻译自: https://www.javacodegeeks.com/2016/03/javafx-tip-23-save-memory-shadow-fields-properties.html

javafx阴影

javafx阴影_JavaFX技巧23:节省内存! 属性的阴影场相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失

    javafx隐藏 另一个简短提示:Swing提供了一个名为CardLayout的布局管理器,该管理器管理容器内的一组组件(卡),但始终仅显示其中一个. 方法CardLayout.show(Contai ...

  8. javafx 教程_JavaFX技巧6:使用透明颜色

    javafx 教程 为用户界面元素选择正确的颜色始终是一个巨大的挑战,但是当您开发可重用的框架控件时,开发人员就无法控制使用它们的应用程序的外观和感觉,这甚至更具挑战性. 尽管您可能总是将元素添加到默 ...

  9. threejs 影子属性_影子场vs.属性访问器接口第2轮

    threejs 影子属性 如果你们还没有注意到Dirk Lemmerman和我之间的(轻松) 摊牌 ,那么让我快速提及一下我们是如何做到这一点的. 首先,Dirk创建了JavaFX技巧23:" ...

最新文章

  1. 接口报Provisional headers are shown原因和解决方法
  2. python从入门到放弃-掌握这个学习方法,让 Python 不再从入门到放弃
  3. SpringMVC入门简单静态资源处理
  4. java.util.ConcurrentModificationException: null at java.util.ArrayList$Itr.checkForComodification(A
  5. MSP430使用wifi模块发送数据(上,测试连接)
  6. 【C语言】扫雷游戏(递归实现展开一片)8000字详细教学
  7. 度阴山先生的《知行合一王阳明》有感
  8. Hive 编号函数
  9. 安卓Camera一代基于虹软人脸识别程序开发
  10. ArcGIS如何创建渔网?渔网不见了。
  11. GDT(全居描述符表)和LDT(局部描述符表)
  12. 哈工大关系抽取模型CasRel代码解读
  13. 嵌入式Linux系统协议栈,嵌入式linux tcpip协议栈概述
  14. 数字如潮人如水:在这个时代,你是要当算法,还是当数据?
  15. vue 获取元素宽高
  16. [SMOJ1810]基因测试
  17. 中国电信增值业务是什么?一类和二类的区别是什么?
  18. debug 进阶 跳过反射以及aop
  19. VMware10虚拟机怎么安装win7x64位系统
  20. 相信未来  作者:食指

热门文章

  1. 最小代价(区间dp)(ybtoj)
  2. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
  3. YbtOJ#482-爬上山顶【凸壳,链表】
  4. P3768-简单的数学题【莫比乌斯反演,杜教筛】
  5. P2633-Count on a tree【主席树,LCA】
  6. P3225-[HNOI2012]矿场搭建【tarjan,图论】
  7. ssl2661-廉价最短路径【SPFA】
  8. 2021牛客暑期多校训练营2 B-Cannon(组合+推式子)
  9. AtCoder Beginner Contest 176总结
  10. 【excrt】屠龙勇士(luogu 4774)