自定义Fx控件的捷径

本文深入探讨FX框架中layoutChildren()函数的作用及自定义布局管理的技巧,解析Node坐标控制权移交机制,分享自定义控件的实用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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

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

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

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

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

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

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

最简洁的自定义
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

另一个重要技巧是建立特化的属性值
比如说 各位是否会疑惑为何加入布局管理的节点 可以屏蔽用户的坐标修改
Node .layoutXProperty(); 我们来看看 Node的源码 里面对layoutXProperty();的初始化

明显 这个invlidate函数搞了什么事情 移交了节点坐标的控制权
但是这里我们不关心这个功能 我们需要搞清这个函数的回调点才能知道有什么用
这段代码在Double Property

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值