1、UIFactory II技术框架介绍 UI层设计 目录 1. 功能节点加载机制 1 1.1 NC界面模拟 1 1.1.1 窗口 2 1.1.2 顶层面板(工作台) 3 1.1.3 工作台—NC logo与快捷搜索面板 5 1.1.4 工作台-所有打开的功能节点页签面板 7 1.1.5 功能节点面板 8 1.1.6 功能窗口部件 10 1.1.7 FuncletWidget(重要理解部分) 11 1.2 加载机制 12 1.2.1 示例 12 1.2.2 需要做的工作 13 1.2.3 查看代码入口 14 1.2.4 菜单项响应件 14 1.2.5 创建界面
2、元素组件容器FuncletWidgetContainer 15 1.2.6 构造ifunlet面板的元素和菜单栏的按钮 18 1.2.7构造状态栏 27 1.3 按钮定义、配置 27 1.3.1 增加自定义按钮 27 1.3.2 按钮可用性的影响因素 31 1.3.3 常用按钮介绍 33 1.3.4 按钮布局方式: 33 1.4 UI事件框架 37 1.4.1 常用事件 37 1.4.2 Xml配置方式 37 1.4.3练习:增加一个自己的事件 38 2. 树型单据设计 39 2.1.1 建立树面板,修改布局组装表 39 2.1.2 为树面板,增加应用模型(mode
3、l) 40 3. UI设计归纳总结 42 3.1 背景 42 3.2 设计思路 42 3.2.1 分离的展显逻辑 42 3.2.2 自助能动的Action元素 43 3.2.3 Composite模式来实现组装 43 3.3 常用元素介绍 43 3.3.1 模型层元素 43 3.3.2 视图层元素 44 3.3.3 常用的接口介绍 45 3.3.4 NC的action事件 46 1. 功能节点加载机制 1.1 NC界面模拟 以下的演示示例 类的命名,我均采用NC产品已有的命名方式。 通过该部分的学习 ü 重点理解NC界面之间的层级管理。
4、 ü 开发过程中理解 每级模板自主能动的概念(父模板负责组装,具体功能由各自来实现) ü 重点理解FuncletWidget界面元素组成,前面的部分了解就可以 1.1.1 窗口 1.1.1.1 实现样式 1.1.1.2 代码规划 ü nc.desktop.ui.NcWindow extends JFrame 1.1.1.3 代码示例 1.1.1.1 显示效果 1.1.2 顶层面板(工作台) 1.1.2.1 实现样式 1.1.1.1 代码规划: ü 容器面板(nc.desktop.ui.Workbench),使用borderlayout布局 ü Nor
5、th面板(nc.desktop.ui.WorkbenchTopPanel extends JPanel) ü Center面板(nc.desktop.ui.WorkbenchSpace extends JPanel) ü 考虑单例 1.1.1.2 代码示例 将其增长到父面板中 增长其子面板 1.1.1.3 显示效果 由于子面板中,还是空的,所以看到效果如下。但是我们代码中知道,已经增长了两级面板 1.1.3 工作台—NC logo与快捷搜索面板 1.1.3.1 实现样式 1.1.3.2 代码示例 其没有子面板,需要实现如下功能 需要增长底图以及N
6、C logo图标代码如下: 备注:通过代码可以知道,NC界面样式主题位于NCHOME/resource/themeroot/ 途径下, 使用绿色主题,实现样式如下 1.1.3.3 显示效果 1.1.4 工作台-所有打开的功能节点页签面板 1.1.4.1 实现样式 1.1.4.2 代码规划 ü 父面板(nc.desktop.ui.WorkbenchSpace) ü 容器面板(nc.ui.pub.beans.ExtTabbedPane extends javax.swing.JTabbedPane), 1.1.4.3 代码示例 增长面板到其父面板中
7、 1.1.5 功能节点面板 1.1.5.1 实现样式 1.1.5.2 代码规划 ü 每个tab页签面板 为一个功能节点(nc.funcnode.ui.FuncNodePanel) ü 制定接口(nc.funcnode.ui.IFuncletWindow),每个功能节点都需要实现该接口中的方法: 显示功能节点窗口(public void showWindow())和关闭功能节点窗口(public boolean closeWindow()) 1.1.5.3 代码示例 ü 登陆成功,默认增长功能导航和消息中心两个功能功能节点 tab 1.1.5.4
8、 显示效果 1.1.6 功能窗口部件 每个功能节点,界面展示的元素都不相同,NC采用如下结构展示 ü 每个FuncNodePanel,使用一个界面元素组件容器(FuncletWidgetContainer extends JPanel)来显示其拥有的元素 。 ü 每个(FuncletWidgetContainer extends JPanel),其使用卡片布局,默认包含一个 FuncletWidget 1.1.7 FuncletWidget(重要理解部分) ü 每个 FuncletWidget包含三部分,容纳菜单栏、界面信息、状态栏 代码结构如下 Fun
9、cletWidget—North放按钮面板 FuncletWidget—Center放信息面板 信息面板—SOUTH 放状态栏目 信息面板—CENTER 放界面信息(funclet) 1.2 xml加载机制 1.2.1 示例 以下演示使用的的配置文献由uap_studio自动生成的主子表结构配置文献 如下图 1.2.2 需要做的工作 接上面的介绍, 在导航菜单双击或者右键打开菜单节点的时候,我们可以预测其响应要做的事件 ü 创建FuncletWidgetContainer 需要为其创建一个子面板FuncletWidget。 为了创建一个Fun
10、cletWidget,需要: a. 创建子面板-菜单栏(放置按钮条) b. 创建子面板—界面信息,放置界面元素(按钮条,界面元素) a) 创建子面板--ifunclet实现类 b) 创建子面板—任务栏 ü 运用创建的FuncletWidgetContainer来构造FuncNodePanel ü 将FuncNodePanel作为一个父面板ExtTabbedPane的一个页署名来展示 1.2.3 查看代码入口 在你对NC产品还不熟悉的时候,可以采用如下的方式 1. 删除xml配置文献中的所有信息, 2. 双击功能节点 3. 这个时候 功能节点应当是打不开的,查看控制台的
11、异常信息。通过异常我们可以看到功能节点打开代码执行顺序 1.2.4 菜单项响应件 nc.funcnode.ui.FuncletWindowEngine.openNode(OpenParam openParam) 方法由导航菜单项事件响应机制调用: 重要是启动线程,执行功能节点打开方法openNodeImple()。 在openNodeImple()中执行如下的工作 1.2.5 创建界面元素组件容器FuncletWidgetContainer 1.2.5.1 环节1 即下图的第1部分 1.2.5.1.1 需要做的工作 创建环节与简朴主子面板的创建环节同样
12、1. 一方面要得到一个FuncletWidgetContainer面板 2. 然后得到一个 FuncletWidget子面板 3. 建立主子面板的关系:将子面板添加到父面板中 1.2.5.1.2 产品代码实现 1. 根据功能节点注册信息frvo,调用FuncletWidgetContainerFactory,创建一个FuncletWidgetContainer 2. 每次创建一个FuncletWidgetContainer,根据功能节点注册信息frvo,创建一个FuncletWidget,并将其添加到FuncletWidgetContainer中 1.2.5.2
13、 环节2 即下图的第2部分 1.2.5.2.1 需要做的工作 创建环节与简朴主子面板的创建环节同样 1. 一方面要创建一个FuncletWidget面板(前面已经创建) 2. 然后创建子面板: 菜单栏和界面信息 3. 建立主子面板的关系:将子面板添加到父面板中 1.2.5.2.2 产品代码实现 1.2.6 构造ifunlet面板的元素和菜单栏的按钮 1.2.6.1 实例化 看代码可以了解,根据功能节点注册处指定的功能类名称,来实例化成一个Ifunclet类型的对象 使用uap_studio自动生成的功 能 类 名 基 类 使 用nc.ui.pubap
14、p.uif2app.ToftPanelAdaptorEx 类, 便于二次开发扩展,其为IFunclet的实现类的子类 还要给节点注册一个参数, 参数名为: BeanConfigFilePath, 值为配置单据界面的 xml 文献的途径,在打开节点的时候会读取并解析该途径下的 xml 文献配置的布局信息 代码实现 以下初始化的,就是读取xml文献信息。加载顺序理解Composite模式, 通Spring IOC 实现组件的任意组装,达成如下的模式:产品=零件+总装表,零件=小零件+装配表 1.2.6.2 初始化—1加载xml文献 关注点:参数名称必须为BeanCo
15、nfigFilePath 1.2.6.3 初始化—2加载登陆环境信息 产品代码: 通过代码可以看到,是加载了xml中一个 id=”context”的 bean对象,并使用这个对象记录:当前功能节点信息、当前登陆信息等。 使用场景: 是否必须配置:是 这个Bean无论何种类型的单据都需要配置 XML配置示例: 1.2.6.4 初始化—3加载xxxPreprocessor 产品代码: 通过代码可以看到,加载了xml中所有以 id已 ”preprocessor”结尾的bean 使用场景: 是否必须配置:否 该属性通常使用对
16、标准产品做二次开发的扩展开发时候使用。 XML配置示例: 详见配置文献\扩展开发标准bean配置.xml 1.2.6.5 初始化—3加载remoteCallCombinatorCaller 产品代码: 通过代码可以看到,加载了xml中所有以 id= ”remoteCallCombinatorCaller”的bean bean中元素都实现了接口IRemoteCallCombinatorUser 调用其 prepare()方法 业务意义: 是否必须配置: 否。 使用场景:通常使用在加载过程中远程调用比较多的单据中,如主子表单据。所有的远程调用统一预加载。
17、 常见的远程调用:加载单据模板、加载查询模板、加载自定义项 规定:放置在其中的需要预加载的远程调用都必须实现接口IRemoteCallCombinatorUser XML配置示例: 1.2.6.6 初始化—4装配总表 1.2.6.6.1 产品代码: 通过代码可以看到,加载一个id=“container” 的bean , 1.2.6.6.2 业务意义: 是否必须配置:是 该bean是视图层元素的装配总表,指定了界面布局方式和每块布局展示的界面视图,以及按钮 根据需要指定界面布局方式,每一块的布局都可作为零件随时替换。 1.2.6.6.3 XML配置
18、规定: 1. init-method="initUI",必须指定,且不能更改 2. 给 container bean 添加 tangramLayoutRoot 属性,拟定具体布局类型。值必须接口TangramLayoutNode的一个实现类。 3. 布局类型有四种:水平布局、垂直布局、tab 页签布局、面板 赋值界面通常是前三种布局互换使用,划定界面分割方式,每个最小的每个框内放一个面板布局 4. HSNode即(Horizontal SplitPane Node)水平布局 必须指定左右的布局方式 5. VSNode即(Vertical SplitPane Node)垂直
19、平布局 必须指定其上下的布局方式 6. TBNode即(TabbedPane Node)垂直平布局 必须指定每个页签的布局方式 可选属性showMode,可在(TabbedPane,CardLayout)选择一个,默认是TabbedPane TabbedPane,下级的布局按照页签的方式展示。 CardLayout,下级的布局按照卡片的方式展示 7. CNode即(Component Node)面板 必须指定其子容器面板,即component属性 1.2.6.6.4 Xml配置示例 具体见 配置文献\列表型配置范文.xml 配置文献\管理型配置范文.xml
20、 配置文献\树管理配置范文.xml 配置文献\树卡型配置范文.xml 1.2.7构造状态栏 1.3 按钮定义、配置 1.3.1 增长自定义按钮 1.3.1.1 非业务按钮的定义方法 不需要向后台传递数据,如单个单据的EXECL导入,EXECL导出等 按钮可以继承nc.ui.uif2.NCAction。例子:nc.ui.uif2.actions.AddAction 为了可以通过Spring实例化,需要显示的指定一下默认方法 1.3.1.1.1 属性: interceptor 所属类:NCAction 意义:拦截器。详见下节拦截器定义 实例化:通常由Spring中注入
21、 exceptionHandler 所属类:NCAction意义:按钮异常解决类 以上两个属性不规定配置,可以参见NCAction的actionPerformed(E) 方法来查看 Model 所属类:这个属性要自己新增,提供get\set方法 (命名习惯上都用这个,但是不规定必须是这个) V6中通常使用nc.ui.uif2.model.AbstractAppModel类型 意义:把此action设立为单据model的观测者。必须的 实例化:由Spring 注入 其他的根据自己的业务需要,定义自己的属性 BtnName 所属类:NCAction 自定义按钮需要指定按钮名称
22、 Code 所属类:NCAction 自定义按钮需要指定按钮编码,注意不要跟产品已有的编码反复 假如不指定code,报错如下 1.3.1.1.2 Overwrite方法 doAction() 执行具体的相应动作,通常会调用model的行为 isActionEnable() (设立当前 action 是否可用, 平台会在模型发出事件告知,调用 它设立按钮的可用状态) 1.3.1.2 标准业务按钮的定义 假如需要将变化的数据同步到后台,则按钮需要继承nc.ui.pubapp.uif2app.actions.pflow.ScriptPFlowActio
23、n(该类是NCAction的一个间接子类) 产品对常用的保存、删除、提交、审批、弃审等增长了标准的实现类。 1.3.1.2.1 属性: 1.3.1.3 菜单按钮的定义 通常在xml中配置一个nc.funcnode.ui.action.GroupAction或者nc.funcnode.ui.action.MenuAction的bean就可以了。 GroupAction:系统自动复制其第一个子按钮的名称和相应事件、控制状态到菜单按钮。 即 l 在xml中对菜单按钮指定名称是不能生效的 l 点击该菜单按钮可以指定其 复制的子按钮的业务操作 l 这个菜单按钮也是可以有可
24、用状态控制 MenuAction:只作为一个显示的菜单按钮,一直可用,没有响应事件 1.3.2 按钮可用性的影响因素 在NC产品中通常有以下两个因素影响按钮的可用性 :界面状态、业务状态 1.3.2.1 界面状态 即当前UI界面所处的状态 V6设立如下几种状态 Init:初始态,功能节点新打开状态. Add新增态, EDIT 编辑态 NOT_EDIT 非编辑 通常按钮的操作,需要通过modle 1.3.2.2 业务状态 在单据上我们通常叫单据状态。有些流程相关的按钮不同的单据状态,按钮的可用性应当是不同的 。如提交按钮,只针对自由态的单
25、据。审批和收回按钮只针对提交态的单据,弃审按钮只针对审批通过的单据。如下图提交态按钮示例 V63预先指定了一些状态,假如你要使用产品标准的按钮,则单据状态的设立,必须按照其规划来设立。 即自由态的单据,单据状态值必须是-1 1.3.3 常用按钮介绍 V63已经实现的标准按钮存放在如下的结构中 Actions:标准操作按钮 Actions.Batch:批解决按钮(通常用在单表中,需要批量解决的地方) Actions.billlist:列表界面操作按钮 Actions. Interceptor:已经实现的常用按钮拦截器 Actions. Pagination:
26、分页解决相关 Actions. Pflow:需要平台流解决(通常是审批流相关:保存、提交、审批、弃审等)的按钮 1.3.4 按钮布局方式 1.3.4.1 节点级次布局 页面位置:页签顶部 可见方式:一直可见 展现形式:菜单 应用场景: 1. 假如tangramLayoutRoot相应的布局管理,只有一个页签(VSNode、HSNode、CNode布局)则可考虑这种方式 2. 假如tangramLayoutRoot相应的布局管理,即便有多个页签(TBNode),但是显示的按钮不需要根据页签的改变发生变化,也可以考虑这种方式 实现方式:配置在TangramContain
27、er中。可以配置浏览态按钮和编辑态按钮 l 元素actions:配置浏览状态下任何页签都可见按钮 l 元素editActons:配置编辑状态下任何页签都可见的按钮。假如没有编辑态,可不配置 1.3.4.2 页签级布局 显示位置:页面顶部 可见方式:随页签的激活状态决定其可见性 展现形式:菜单 应用场景: 假如顶层容器tangramLayoutRoot采用TBNode布局,且需要根据页签的改变显示不同的按钮,则采 用这种方式 实现方式:分为绝对布局和相对布局 1.3.4.2.1 绝对布局 1) 将按钮和视图层元素 运用StandAloneToftPanelActi
28、onContainer来包装
l 注意
29、s” 的bean,不需要再做配置,程序会自动加载 1.3.4.2.2 相对布局 这种布局方式不常见,作为了解 1) 将按钮和视图层元素 运用PlugableTangramContainer来包装 参数constraints传入相应的视图层元素 参数“actions” 传送相应的按钮 2) 运用 toftpanelActionContributors对包装成的对象进行组织。 3) Container也要修改成相对布局 后面的布局要指定参照targetComponent,并制定相对位置 1.3.4.3 视图级布局 显示位置:视图所在tab的右上侧 可见方式:一
30、直可见 展现形式:工具栏 应用场景:假如上层布局采用了TBNode,则根据需要考虑增长视图按钮 实现方式: 1. 视图元素控件必须实现 IComponentWithActions接 口。 2. 视图层所在的上级布局必须采用了TBNode,由于视图级的元素是显示在页签的右上侧,只有TBNode才有这个位置 3. 当前卡片视图nc.ui.pubapp.uif2app.view.ShowUpableBillForm已经实现了该接口 1.4 UI事件框架 1.4.1 常用事件 NC 产品针对自己的界面常用的事件做了封装,常见的有 卡片列表各种编辑事件、组织改变事件、 新
31、增事件、 排序事件、 页签切换事件、行改变事件、合计事件等。 已经实现的事件放在 重要是: Event:公共的事件或者接口 Event.card:卡片界面常用事件 Event.list:列表界面常用事件 1.4.2 Xml配置方式 2. 一方面配置nc.ui.pubapp.uif2app.event.EventHandlerGroup 属性evnent: 取值为具体的 event 类; 属性 picky: 取值可实现 IPickyEventHandler 接口来过滤是否派发事件。假如不需要,则赋值 例如 ChildrenPicky 类则表达按默认的指定 VO 类
32、方式来过滤,即只有bodyVoClasses 中配置的 VO 类才会派发到相应的事件解决中; 属性 handler: 取值必须实现 IAppEventHandler 接口,接口参数相应具体的event 类。如下图 3. 运用AppEventHandlerMediator来组织事件和模型model. 注意将其bean id 以Mediator结尾,这样系统才干自动加载 1.4.3练习:增长一个自己的事件 2. 树型单据设计 一方面要先生成标准的管理型单据,然后将其改导致数管理型单据 2.1.1 建立树面板,修改布局组装表
33、 2.1.1.1 增长树面板 树面板可以使用ponents.TreePanel或者其子类 2.1.1.2 更改界面总装表(container)指定其布局位置。 我们需要替换本来的快捷查询区域,将本来的替换掉 2.1.2 为树面板,增长应用模型(model) 1. 模型实例化:树面板配合使用的model是通常使用nc.ui.uif2.model.HierachicalDataAppModel或者其子类 2. 模型属性初始化:模型服务类(service)、树构造器策略(treeCreateStrategy)、登陆环境(context) 3. 模型服务类(serv
34、ice),模型用来向后台同步数据。可以实现nc.ui.uif2.model.IAppModelService或者扩展自己的方法 4. 树构造器策略(treeCreateStrategy):用来将查询出来数据组织成树结构。 可使用nc.vo.bd.meta.BDObjectTreeCreateStrategy。构造器策略需要指定根节点名称和VO转换工厂 5. 定义VO转换工厂:通常属性结构是查询一个单VO。可以使用nc.vo.bd.meta.BDObjectAdpaterFactory来转换 6. 模型管理器:通常用来调用模型的service服务,为模型初始化提供数据 每个树的
35、数据初始方式不同,产品没条提供标准模型管理器。 需要实现nc.ui.uif2.model.IAppModelDataManager接口,实现其initModel()方法 通常树节点的左侧的树数据,在model加载完毕就要查询出来。可以在此完毕 7. 创建一个名字如:xxxMediator类。作为左侧树的模型和右侧的管理模型的协调者 l Mediator类在功能节点打开的时候就能自动加载。 l 在这个类中为两个模型注册事件监听,抓取到两个模型的变化事件 l 例:我们可以抓取到右侧模型 模型初始化事件,同时完毕我们的左侧树模型初始化。也可以抓取左侧树模型的选择节点变化事件,来同
36、步右侧模型的数据的变化 3. UI设计归纳总结(复制自陈伟文档) 3.1 背景 NC5.X系列,采用UIFactory I NC6.X系列,采用UIFactory II Templet Method模式, UI、EventHandler、Controler分工,典型的节点可以快速适配,快速开发 Composite模式, 通Spring IOC 实现组件的任意组装,达成如下的模式:产品=零件+总装表,零件=小零件+装配表 非典型的界面不能很好的适配 存储大量代码复制 很好的解决界面多样性的问题 并且实现松耦合的代码结构+高重用的组件 3.2 设计思绪 3.2.1
37、 分离的展显逻辑 a. 将一个我们在屏幕上看到的GUI元素也按照MVC的思想来解决,提成 展现对象(VIEW)和模型对象(MODEL) b. 展现对象,即是封装后的容器类,用来直观的展现数据 c. 模型对象,用来控制展现对象。一个领域对象通常通常持有持久化信息(VO、services)来培训,将展现层数据和后台持久化服务连通 d. V依赖M,M不依赖V,一个M可以服务多个V e. V之间 互不依赖,V只和M打交道,对V的操作会触发M的行为,V对M的实现进行响应 f. M之间假如要进行通信,通常设计xxx Mediator(协调者),用来协调M之间信息传递 3.2.2 自助能动的A
38、ction元素 Action 应当是细力度的,即功能单一,便于扩展 Action 能自身决定可用性,符合面向对象的特性,通过ActionContributors进行组织,以方便Spring IOC 相应用元素的拼装 3.2.3 Composite模式来实现组装 统一的UI入口类ToftPanelAdapter,自动装配; Spring依赖注入,XML界面配置组装视图层、模型层、和按钮; TangramLayout灵活布局; 3.3 常用元素介绍 3.3.1 模型层元素 appModel均是nc.ui.uif2.model.IAppModel的直接或间接实现类,不同的业务场景
39、有不同的实现,本次只介绍常用的模型 模型名称 应用场景 特点 HierachicalDataAppModel 存储有层次关系的数据模型 l 运用内部维护的 DefaultTreeModel 来存储树型数据 l 可以获得当前选中的节点和选中的数据 l 可以发出MODEL_INITIALIZED、SELECTION_CHANGED 以及 UISTATE_CHANGED事件 BillManageModel 存储平面数据的模型 l 应用最多的一个模型 l 支持单行和多行选择 l 可以发出 MODEL_INITIALIZED、 SELECTION_CHANGED、UI
40、STATE_CHANGED、DATA_INSERTED、DATA_DELETED、SELECTED_DATE_CHANGED 等事件 l BatchBillTableModel 支持进行批量增、删、改等操作的平面型数据模型 l 只有编辑和非编辑两种状态 l 需要配套的服务类IBatchAppModelService l 与视图层元素BatchBillTable配合使用 l 可以发出 MODEL_INITIALIZED、 SELECTION_CHANGED、 UISTATE_CHANGED、DATA_UPDATED、DATA_DELETED、DATA_INSERTED 等事件
41、 3.3.2 视图层元素 常见的NC视图均直接或间接集成自javax.swing.JPanel(JPanel参见JDK_API) 常见的如下 平面视图V6产品通常使用nc.ui.pubapp.uif2app.view下的类; 特殊视图(树、参照等)通常使用ponents下的类 模型名称 应用场景 特点 TreePanel 树型控件的展现面板 l 与 HierachicalDataAppModel 模型配合使用,响应此模型的事件 BillForm 表单界面的展现控件 l 运用单据模板的卡片视图(BillCardPanel)进行展现, l 支持单表头的卡片
42、也支持标准的卡片视图(聚合 VO 的上卡片下列表形式) l 暂时只与 BillManageModel 配合,实现对模型数据的展现以及事件的相应 l 在V6中常使用其子类 ShowUpableBillForm BillCardPanelForm 表单界面的展现控件 l 与上者的不同是,它只支持单表头的卡片单据,即只有上部的表单,没有下部列表 l 在V6中常使用其子类ShowUpableBillCardPanelForm BillListView 数据的列表展现 l 运用单据模板的列表视图(BillListPanel)进行展现,即支持单表头也支持 标准的单据 l 暂时只与 Bi
43、llManageModel 配合,实现对模型数据的展现以及事件的相应 l 在V6中常使用其子类ShowUpableBillListView BatchBillTable 支持批量操作的列表编辑器, 支持数据的展现和编辑 l 运用单据模板的卡片视图(BillCardPanel)进行展现,运用单据模板的单表体形式实现,因此需要使用单表体的单据模板 l 与BatchBillTableModel配合,实现对 模型数据的展现及事件的响应 l 在V6中常使用其子类ShowUpableBatchBillTable l 与 BatchEditAction、BatchAddLineAction、
44、BatchDelLineAction 等动作配合使用 3.3.3 常用的接口介绍 重要讲解下 模型层、视图层实现的接口 接口名称 作用 实现 IAutoShowUpComponent 将实现该接口的控件转换到可视状态 控件实现该接口,通常运用 AutoShowUpEventSource 作为委托代理 类,将所有接口行为委托给该类实例来实现。 ITabbedPaneAwareComponent 控制实现该接口控件是否可以隐藏;告知外层容器该控件的可见性的切换。 控件实现该接口,通常运用 TabbedPaneAwareCompnonetDelegate 作为委托
45、代理类,将该接口行为委托给该代理类实例完毕。 IComponentWithActions 使实现该接口的控件具有提供和展现 Action 的能力,一般用于提供视图级别的 Action,容器会将该控件以 Tab 签的形式展现,并将其 Action 展 现在 Tab 签的右侧。 需要达成该效果的控件实现该接口即可, 通过配置文献注射需要展现的 Action 3.3.4 NC的action事件 Nc继承javax.swing.AbstractAction增长了自己的抽象类nc.funcnode.ui.action.AbstractNCAction, 所有的action均集成自该类。NC中常见的aciton如下图所示,根据业务不同,均是对javax.swing.Action不同实现形式 建议查看JDK_API或者相关视频先了解Action事件的特性,再来看NC具体的实现 NC封装的后的action假如有业务操作,通常会持有一个model元素 将该action事件注册到按钮上后,该action响应按钮事件就可以操作model元素,并将响应间接传递到视图层展现出来
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818