Node API 节点

什么是节点?

节点提供了NetBeans中大多数对象的视觉表示和明显的行为。它可以用来表示来自Datasystems API的数据对象(并为该数据对象提供更加UI友好的包装),也可以出于特殊目的单独创建它。例如,资源管理器中显示的每个图标都是一个节点,这是整个节点层次结构的主要UI界面。(许多对话框,组件面板等也都通过Explorer API基于节点运行。)

节点本身不应该用于保存实际数据。应该存储在数据对象或其他适当的存储机制中。相反,它们为现有数据提供了一种展示设备。

JavaBean和节点

节点是JavaBeans概念的一种扩展,它添加了一些功能,这些功能对于资源管理器视图的全部功能是必需的。JavaBeans规范中缺少的一些关键组件 :

  • 完整的层次结构支持。Java 2 Bean上下文API 为树形结构中的Bean层次结构提供了基本支持,但不足以处理NetBeans的要求,例如对各种子包含策略的特殊支持。
  • Cookie,操作和其他特定于NetBeans的接口可以更好地放置为直接Java级别API的要求,而不是始终需要使用强制转换或自省来确定其可用性。
  • 节点上的某些基本操作(例如,创建节点的可序列化形式或剪切和粘贴支持)最好实现为抽象基类。
  • 最重要的是,常规使用JavaBeans要求在对象需要属性列表时使用自省功能。这是一个非常频繁的操作,发现其开销不可接受。此外,由于Java和Bean体系结构的本质,自省会阻止动态修改节点API允许的对象支持的属性集。

就是说,在设计Nodes系统时绝不会忽略JavaBeans体系结构。它被用作概念基础。为了模糊区分,可以使用特殊的节点实现,这些实现将标准JavaBean包裹起来并将其作为节点显示,包括处理任何可用的Bean Context,自省属性等等。

 

特殊节点用法

在实施节点或节点层次结构的过程中,或仅使用其他代码中的节点时,有几种特殊的操作和技术可能对应用于节点有用。

序列化和遍历

如果由于某种原因需要存储(序列化)节点,由于将其连接到系统其余部分的Java级别引用比较复杂,通常这是不可能的。相反,您必须使用特殊的可序列化句柄,该句柄通过节点在层次结构中的位置表示该节点,并允许在反序列化之后再次查找原始节点(如果仍然存在)。要创建一个句柄,只需调用 Node.getHandle(),然后还原节点调用 Node.Handle.getNode()

在中实现了可用句柄的创建 AbstractNode,您无需覆盖它。但是,请注意,一个句柄包括目标节点层次结构的根节点的句柄以及到达目标节点的路径(按系统名称);因此,如果您要创建根节点,并希望其或其子级可序列化,则应创建一个特定的实现,该实现Node.Handle能够从头开始重建根,然后从返回 Node.getHandle()

如有必要,NodeOp此类 方法NodeOp.findPath(...)还可用于沿层次结构进行通用导航。

JavaBean桥接

可以创建一个从底层JavaBean获取其节点行为的节点。也就是说,将使用Bean内省来确定其属性(还将其归类为普通,专家和隐藏的属性集),如果Bean指定一个,则为其找到一个定制器,从BeanInfo中查找一个图标,通过序列化实现复制,根据Bean Context创建子级,依此类推。

由于大多数行为都是自动的,并且是由JavaBeans API驱动的,因此您几乎不需要使用它:只需使用创建节点 new BeanNode(...)

不要将这样的bean节点(可能是恰好使用JavaBeans API来实现其行为的任何类型的节点)与创建来表示其文件为JavaBean(序列化)的数据对象的特定种类的节点混淆。 ,或作为一个类)-后一种类型的节点在大多数方面的行为都与其他任何数据节点一样,并且仅添加了几个功能(例如自定义操作)。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值