作者:梁祺 (eclipsesbs@gmail.com)
来自:http://www.benisoft.net/day2/index.html
今天,我们看怎样创建一个View。在Eclipse里,用户通过View和Editor协同工作来完成任务。 Editor提供界面以完成任务的主要部分,以Eclipse提供的JDT(Java Development Tool)为例, 用户使用JDT来开发Java应用程序,所以很大一部分工作都是围绕编辑Java源程序,那么编辑工作就应该放在Editor里完成, 也就是Java Editor,JDT的其他View为Java应用程序的开发提供辅助,比如显示正在编辑的Java源程序所有的成员变量和方法。
首先来创建一个Plug-in项目,输入项目名”eclipse.tutorial.day2“。
输入Plug-in的ID,"eclipse.tutorial.day2"。
这次我们仍然选用Eclipse提供的例子模版,“Plug-in with a view”。 这个模版会生成一个名叫Sample View的View,包括右键快捷菜单,View工具栏,鼠标双击, 排序以及过滤。这个模版扩展了3个扩展点,我们会在后面一一介绍它们。
接下来是提供模版需要的信息。
- Java Package Name:Sample View所在的Java包名。
- View Class Name:Sample View的Java实现类名,就用缺省的SampleView。
- View Name:View的名字,“Sample View”。
- View Category ID:View类别的ID,Eclipse将属于同一个类别的View放在一起, 便于用户通过“Window/Show View/Others”查找某个View。
- View Category Name:View类别名。
- Select the viewer type:选择表格控件Table Viewer,我们明天会尝试Tree Viewer。
点击“Finish”按钮。
启动Eclipse,选择“Window/Show View/Other”。
在Show View对话框中找到Sample Category和Sample View。点击“Next”按钮。
我们在前面为Sample View选择了表格控件Table Viewer,这个表格有3行内容。
Sample View的表格能够接受鼠标双击事件,选择一行用鼠标双击,Sample View就会做出响应,弹出对话框。
Sample View实现了两个View工具栏按钮,点击右上角的工具栏按钮,Sample View弹出对话框“Action 1 executed”。
下面我们来看一下代码。在Package Explorer View里找到plug-in.xml双击, Plug-in Editor的Extensions子页显示这个Plug-in实现了3个扩展点。
首先是扩展点“org.eclipse.ui.views”,它是创建View所必须扩展的扩展点。 “Sample Category”定义了一个View的类别, ID为“eclipse.tutorial.day2”,名字为“Sample Category”。parentCategory留空。 通过parentCategory,我们可以将新的View类别设置为另一个View类别的子类,从而形成一个树状结构。
“Sample View”定义了一个View,ID为“eclipse.tutorial.day2.views.SampleView”, 名字为“Sample View”,模版为我们生成的Java类为“eclipse.tutorial.day2.views.SampleView”, category为前面定义的“eclipse.tutorial.day2”,还有图标。将鼠标移到class上, 我们可以看到View的Java类必须实现IViewPart接口。接下来我们看一下代码。
点击class,打开eclipse.tutorial.day2.views.SampleView。 它继承自ViewPart,一般情况View都是继承自这个虚类,这个虚类实现了IViewPart接口。 Sample View的ID作为常量定义在最前面,这是一个值得推荐的做法。 接下来定义了一个表格控件TableViewer的变量viewer,以及三个Action变量。
/**
* The ID of the view as specified by the extension.
*/
public static final String ID = \"eclipse.tutorial.day2.views.SampleView\";
private TableViewer viewer;
private Action action1;
private Action action2;
private Action doubleClickAction;
TableViewer来自于Eclipse提供的JFace, 它是对Eclipse的原生窗口控件库SWT的基于MVC(Model,View,和Controller)封装, 目的是为了避免在代码里将对窗口对象的操作代码和数据处理逻辑的代码混杂在一起,通过MVC模式,将两者隔离开, 便于理解和维护。这里,TableViewer就充当MVC Controller的角色,MVC View是它所封装的SWT窗口对象, MVC Model就是下面这个类ViewContentProvider。
TableViewer必须要求一个实现IStructuredContentProvider接口的类提供表格显示所需要的Java对象, 所以称为ContentProvider。我们这里看到的是最简单的实现,就是在getElements()直接返回所需要显示的对象数组, 数组的一个元素就是表格里的一行。这个例子的表格只有一列,一行内容就是一个字符串。如果表格内容复杂, 有很多列的话,就需要一个较复杂的数据对象来表示一行。
* The content provider class is responsible for
* providing objects to the view. It can wrap
* existing objects in adapters or simply return
* objects as-is. These objects may be sensitive
* to the current input of the view, or ignore
* it and always show the same content
* (like Task List, for example).
*/
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return new String[] { \"One\", \"Two\", \"Three\" };
}
}
接下面的内部类ViewLabelProvider是告诉TableViewer如何显示一行的数据。 它必须实现ITableLabelProvider接口,一般我们会继承LabelProvider,让它提供一些缺省实现, 这样代码可以简洁一些。
public String getColumnText(Object obj, int index) {
return getText(obj);
}
public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}
public Image getImage(Object obj) {
return PlatformUI.getWorkbench().
getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
}
下一个内部类是NameSorter,这个类非常简单,除了继承ViewerSorter,什么也没有做。 实际上,ViewerSorter包含一个文本比较器,所以我们删除NameSorter这个类,直接用ViewerSorter也行。
接着是SampleView的构造函数,这里本人曾经出过问题,创建的View在运行时怎么也找不到, 检查了很多地方,发现View没有实例化出来,最后才发现缺省构造函数不知道什么时候被加一个参数, 这样缺省构造函数就没了。 原因是Eclipse检查到Plug-in实现”org.eclipse.ui.views”这个扩展点后,它需要用反射实例化View对象的, 所以必须为它保留一个无参数的构造函数。
View的所有窗口控件的布局都必须在createPartControl()里完成,控件的布局我们会在以后讲到。 这里简单说一下这个例子是怎么做的。createPartControl()接受参数parent, 它是Eclipse为我们准备的摆放控件的容器,所以它的类型是Composite,TableViewer直接放在parent这个容器里, 所以TableViewer构造函数第一个参数必须输入它的父控件(也就是它的容器), 构造函数的第二个参数是TableViewer的风格,这里分别是允许多行选中(SWT.MULTI), 水平滚动条(SWT.H_SCROLL),垂直滚动条(SWT.V_SCROLL)。接着是实例化它的ContentProvider, LableProvider,和Sorter。最后这个viewer.setInput(getViewSite())可能有点令人费解, 设置TableViewer的输入为什么是View Site呢?其实你在这里除了null设任何东西都可以, 这和ContentProvider的实现有关,我们稍后介绍。接下来几个方法就直观一些了, 先给TableViewer关联一个联机帮助的ID,“eclipse.tutorial.day2.viewer”。 然后是makeActions()创建Action对象,接着hookContextMenu()创建右键菜单, hookDoubleClickAction()截获并处理TableViewer的双击事件, 最后contributeToActionBars()把Action添加到View的下拉菜单和工具栏上。
* This is a callback that will allow us
* to create the viewer and initialize it.
*/
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
// Create the help context id for the viewer's control
PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(),
"eclipse.tutorial.day2.viewer");
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
}
我们前面提到,这个例子的ViewContentProvider的实现是最简单的做法, 它完全忽略input,所以它的inputChanged()的实现是空的。 通常的做法是将表格需要显示的对象通过viewer.setInput()交给TableViewer, TableViewer通知ContentProvider的inputChanged()方法,新的输入对象就是newInput参数, ContentProvider保存newInput的引用,在显示时, ContentProvider通过getElements()方法从newInput中获取对应到每一行的对象集合,返回给TableViewer显示。 这个例子在getElements()里直接写死需要返回的对象数组,所以input在这里就没有意义了,任何对象都可以使 getElements()返回写死的对象数组。
第二个实现的扩展点是“org.eclipse.ui.perspectiveExtensions”。通过这个扩展点, 我们将Sample View添加到Java Perspective。 Perspective将任务相关的Editor和View关联起来,用户切换Perspective将当前的View隐藏起来, 显示新任务相关的View。仍然以Java Perspective举例, Java Perspective由Outline View显示当前Java Editor显示的Java源程序结构, 比如成员变量,内部类,成员方法等等,Javadoc View显示Java源程序中光标所在的成员变量或方法的Javadoc, 等等。Plug-in Development Perspective用于Plug-in的配置, 它也有Outline View显示plug-in.xml的结构,显示扩展点等等。 但它没有Javadoc View,因为Javadoc View提供的功能和Plug-in的配置无关。在这个例子里, 我们假设Sample View对Java Perspective是有用的。首先加一个perspectiveExtension, 目标Java Perspective的ID是“org.eclipse.jdt.ui.JavaPerspective”。 为了给Java Perspective添加一个View,需要在perspectiveExtension下添加view, ID输入Sample View的ID,“eclipse.tutorial.day2.views.SampleView”,位置在Problem View的右侧。
最后实现的扩展点是“org.eclipse.help.contexts”,它和上下文帮助有关。 所谓上下文帮助就是允许用户通过F1键获取焦点所在控件的帮助信息。这个例子为TableViewer建立一个上下文帮助, 所以只要焦点在TableViewer上,按F1键就能获得TableViewer的帮助信息。首先定义contexts, 指定一个XML文件,这个文件包含了上下文帮助的内容。如果该文件来自其他Plug-in, 可以在plugin这栏里输入该Plug-in的ID。至于上下文帮助及其XML文件,我们留到后面和帮助一起介绍。
如果希望从一个现有的Plug-in项目中新建View,在Plug-in Editor的Extensions页,点击”Add“按钮, 在对话框中输入”views“,找到扩展点”org.eclipse.ui.views“,并选中, 我们就会看到刚刚介绍过的模板Sample View。一般都会使用Sample View来创建View的骨架,删除掉不需要的代码, 这样会简单一点。
到这里,我们了解了怎么创建一个View,怎么创建TableViewer, 使用Content Provider和Label Provider在表格里显示数据, 以及怎么将View通过Perspective扩展点将View关联到其他Perspective。
相关推荐
"HFSS软件包下的圆锥(圆形)喇叭天线模型制作与参数调整:自主创造,实验验证,全流程教程指导",HFSS圆锥(圆形)喇叭天线 天线模型,自己做的,附带结果,可改参数,HFSS软件包 (有教程,具体到每一步,可以自己做出来) ,HFSS; 圆锥(圆形)喇叭天线; 模型自制; 参数可改; HFSS软件包; 教程详尽。,HFSS圆锥喇叭天线模型:可自定义参数与结果
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
"基于S7-200 PLC与组态王技术构建的智能化新能源汽车电池检测系统上位机软件平台",基于S7-200plc与组态王组态的新能源汽车电池检测系统上位机 ,S7-200plc;组态王组态;新能源汽车电池检测系统;上位机,"基于PLC与组态王的汽车电池检测上位机系统"
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
nodejs010-nodejs-docs-0.10.5-8.el6.centos.alt.x86_64.rpm
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
“基于Cadence Orcad的全面元器件数据库管理系统——全配版与基础版对比分析”,搭建使用Cadence Orcad CIS元器件数据库(默认为Access数据库,如需MySQL数据库需提前沟通),含orcad符号库,Allegro PCB库 —————————————————— 该元器件数据库种类丰富,大分类就有28种(全配版,含有很多如海思,全志,瑞芯微,TI,Xilinx等主流复杂IC的库信息),20种(基础版)。 ———————————————————— 全配版包含1000多种元器件属性信息汇总,都是已验证使用过的,可直接用于自己的电路设计。 全配版还附有大部分与元器件PCB封装已匹配好的的3D模型。 强烈建议原理图库及封装库基于数据库的方式来管理,好处主要有以下几点: 1. 易于管理,可通过数据库文件批量添加、更改或删除器件参数; 2. 减少原理图库的种类, 同类器件只需要新建一次原理图库, 例如不同阻值、精度的电阻; 3. 器件具有唯一性, 每个器件的参数都是唯一的; 4. 方便使用, 如使用 Link Database Part 功能,可以快速完成器件批量替,
1、文件内容:ptlib-devel-2.10.10-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ptlib-devel-2.10.10-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
西门子S7-1200+5轴伺服驱动系统的走工艺对象技术解析——采用脉冲输出驱动方式的控制方法及在全博途V15.1程序中的应用研究。,S7-1200+5轴伺服 走工艺对象 脉冲输出驱动方式 适用于西门子s7-1200+第三方伺服驱动器 全套博途v15.1程序 ,S7-1200;5轴伺服;走工艺对象;脉冲输出驱动方式;第三方伺服驱动器;博途v15.1程序,西门子S7-1200 5轴伺服系统控制程序
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
《四层三列堆垛式立体库控制系统:带解释的梯形图接线原理图及IO分配与组态画面详解》,4x3堆垛式立体库4层3列四层三列书架式立体库控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,立体库; 堆垛式; 控制系统; 梯形图; 接线图; 原理图; IO分配; 组态画面,"立体库控制系统原理图:四层三列堆垛式书架的IO分配与组态画面"
1、文件内容:pyOpenSSL-0.13.1-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pyOpenSSL-0.13.1-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
基于三菱PLC与MCGS技术的防盗门报警系统:梯形图接线图原理及IO分配、组态画面详解,基于三菱PLC和MCGS的防盗门报警器 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,三菱PLC; MCGS; 防盗门报警器; 梯形图接线图; IO分配; 组态画面,基于三菱PLC与MCGS的报警器系统:梯形图接线与组态画面详解
"COMSOL金膜表面等离子共振(SPR)分析:不同入射角下的共振角度观察",comsol金膜表面等离子共振SPR,不同入射角查看共振角度 ,关键词:comsol金膜表面;等离子共振(SPR);不同入射角;共振角度;分离度;角度调节;材料表面光;生物传感;互动现象;实时分析,"COMSOL研究金膜表面等离子共振: 角度变化影响共振角度"
1. 机器学习与深度学习 机器学习是人工智能的核心领域,旨在通过数据训练模型,使计算机能够从经验中学习和改进。监督学习、无监督学习和强化学习是其主要分支,广泛应用于图像识别、语音处理和预测分析等场景。深度学习作为机器学习的重要子领域,通过神经网络模拟人脑的工作机制,尤其在图像分类、自然语言处理和自动驾驶等领域取得了突破性进展。深度学习模型如卷积神经网络(CNN)和循环神经网络(RNN)已成为许多AI应用的基础。 2. 自然语言处理与计算机视觉 自然语言处理(NLP)使计算机能够理解、生成和处理人类语言,关键技术包括机器翻译、语音识别、情感分析和问答系统。例如,智能助手(如Siri、Alexa)和聊天机器人(如ChatGPT)都依赖于NLP技术。计算机视觉则让计算机能够“看懂”图像和视频,广泛应用于人脸识别、自动驾驶、医疗影像分析等领域。目标检测、图像分割和视频分析等技术正在推动安防、零售和制造业的智能化转型。 3. 强化学习与AI伦理 强化学习通过试错和奖励机制,训练智能体在复杂环境中做出最优决策,广泛应用于游戏AI(如AlphaGo)、机器人控制和资源调度等领域。与此同时,随着AI技术的快速发展,AI伦理和社会影响也成为重要研究方向。如何确保AI的公平性、透明性和隐私保护,以及应对AI对就业和社会结构的潜在影响,已成为学术界和产业界共同关注的焦点。AI的可持续发展离不开技术与伦理的平衡。
不同放牧策略对草原土壤性质的影响研究——基于机器学习.pdf
本资源提供一种基于Proteus仿真的纯硬件NE555呼吸灯设计方案,结合NE555定时器、三极管(如2N2222或8050)、电阻、电容等元件,完整实现LED的呼吸灯效果。内容包括: Proteus仿真模型搭建:电路原理图设计、虚拟示波器波形分析; 硬件实现步骤:元件选型、焊接调试、实测波形对比; 参数调优方法:通过仿真快速调整RC参数控制呼吸频率与渐变平滑度。 目标: 掌握Proteus中NE555电路仿真技巧; 理解硬件电路与仿真模型的匹配性; 学习从虚拟仿真到实物落地的全流程设计; 培养故障排查与参数优化能力。 核心功能: 仿真验证:在Proteus中模拟NE555的PWM输出及LED亮度渐变效果; 硬件实现:通过三极管驱动电路将仿真结果转化为实物呼吸灯; 双向调试:支持仿真与硬件实测数据对比,快速定位设计问题。 关键模块: NE555无稳态多谐振荡器(控制占空比渐变); Proteus虚拟示波器(观测PWM波形变化); 三极管电流放大电路(驱动高亮度LED)。 设计亮点 虚实结合:通过Proteus仿真降低硬件试错成本,提升学习效率。
,全c源程序太阳能并网逆变器全C源程序单相3kw5kw,板图原理图清单,可以直接打板验证,超好的生产光伏逆变器的技术方案,量产方案
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx