自定义Fx控件的捷径

自定义Fx控件的捷径

layoutChildren()将在有事件(影响界面尺寸的事件)触发回调函数引发布局管理行为

或者使用者刻意调用 layoutChildren()引发布局管理行为

也就是说 重写layoutChildren()就可以获得一个自定义的布局

虽然Vbox源码很少 但是能看到 这个函数还是非常不精简

原因在于Fx 的Node(界面元素基类)坐标符合Css的盒子模型

Margin -board –Box 具有多层夹心的特点 而且是resize坐标控件 也就是尺寸会跟随整体尺寸缩放
具有Max |min |Pref : width/height 尺寸区间属性 在布局管理中即时运算坐标

这看起来不错 但实际上带来了巨大的运算量和开发困难

最简洁的自定义
自定义Fx控件的捷径
自定义Fx控件的捷径
自定义Fx控件的捷径

另一个重要技巧是建立特化的属性值
比如说 各位是否会疑惑为何加入布局管理的节点 可以屏蔽用户的坐标修改
Node .layoutXProperty(); 我们来看看 Node的源码 里面对layoutXProperty();的初始化
自定义Fx控件的捷径
明显 这个invlidate函数搞了什么事情 移交了节点坐标的控制权
但是这里我们不关心这个功能 我们需要搞清这个函数的回调点才能知道有什么用
自定义Fx控件的捷径

这个是DoubleProperty的set 在设置新值之后调用了 markInvaild
这个函数不仅触发了注册的changeListener而且对一个标志位进行置位,还调用了invaildated函数
实际上这个函数属于新数值注入行为的一个切面 所以不难理解为什么重写这个函数来移交坐标控制管理权
自定义Fx控件的捷径

以上是fx自定义的比较重点的技巧 其实自定义一个控件除了对基类的理解 还有CssmetaData等机制 但是 一方面从基类继承的一些东西会全自动延用 大多情况我们不需要自己额外定义
希望如果有人用这个玩意不要有吃屎的感觉
如果看到这篇的人恰巧吃屎了 我希望上面的东西能帮你吃的优雅 吃的香