官方选择管理教程1:http://platform.netbeans.org/tutorials/nbm-selection-1.html
文章目的:
关于用户当前选择的内容,NetBeans有两种基本概念, TopComponents的LookUp和当前活动的Nodes。
本文介绍了使用Lookup来处理我们当前所选择的内容,可以理解为程序维护了一个MAP,这个map的key是类的名称,value是类的实例。将代码根据功能分成多个模块后,每个模块通过访问这个map获取到其他模块的对象,做相关的处理。这种解决方法有效地将代码解耦成不同模块,同时彼此又可以进行数据的传递。
知识点:
1、使用Module Development > Window创建的是singleton topcomponents,这种组建在一个程序中只存在一个实例
2、获取当前程序中获得焦点的对象可以通过直接调用:Utilities.actionsGlobalContext()
3、TopComponent的componentOpened()方法是在组件在窗体中被显示时调用;componentClosed()方法是用户在tab页签上单击X关闭时被调用;
4、LookupListener类的resultChanged()方法是在监听的对象变化时被调用
5、非Singleton的TopComponent无法使用模板来创建,需要手动创建JPanel后,继承TopComponent,同时,包中需要添加依赖TopComponent、Lookups、Utilities API、UI Utilities API。同时需要手动注册组件到layer配置文件,如:
@TopComponent.Description( preferredID = "MyEditorTopComponent", persistenceType = TopComponent.PERSISTENCE_ALWAYS)@TopComponent.Registration( mode = "editor", openAtStartup = true)@ActionID( category = "Window", id = "org.myorg.myeditor.MyEditorTopComponent")@ActionReference( path = "Menu/Window")@TopComponent.OpenActionRegistration( displayName = "#CTL_MyEditorActio")@NbBundle.Messages({ "CTL_MyEditorActio=MyEditor"})
6、InstanceContent类提供了方法让我们可以修改Lookup中的内容
a、首先,在容器中声明一个对象:private final InstanceContent content = new InstanceContent();
b、将该对象通过AbstractLookup关联到上下文中:associateLookup (new AbstractLookup (content));
c、在需要修改内容的地方,设置content的内容:content.set(Collections.singleton (obj), null);
7、在第5步的添加模块项目步骤中:
代码名称基(Code Name Base)唯一标识一个模块。一个模块可以简单理解为一个单独的jar包。
8、一个模块对其他模块而言,默认是不可见的,必须设置其为公共包其他模块才能引用
设置方法:在模块右键选择属性,在API版本控制的公共包下面,勾选对应的包
勾选后,在项目元数据(project.xml)中将添加声明,当编译时,该信息会编译到模块的manifest中
9、一个模块要使用另一个模块,必须首先建立依赖,方法是选择模块后右键选择属性,在库中添加依赖关系
10、如果希望在当前应用程序中根据选择进行相关处理,需要:
a、组件继承LookupListener,实现resultChanged方法
b、在组件打开的时候,需要通过Utilities的Utilities.actionsGlobalContext()获得全局上下文,获取上下文中的lookup result,并对result添加一个监听,以便在resultChanged方法中进行上下文处理
c、在组件关闭的时候,需要从lookup result中删除我们的监听