当前位置:首页 > Eclipse RCP开发桌面程序
8 name=\ization\ 9 value=\10 11
可见,我们为我们的产品添加了一个prefereneCustomization属性,该属性的值为
plugin_customization.ini文件,在该文件中,我们可以配置我们的样式。在这里,它的内容如下:
1org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false 2org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight
事实上,在这个文件中可以定义的参数有上百个,大家可以查看Eclipse的文档。 这个时候,效果应该是这样的了:
好了,我们现在对以上的代码做一个总结。我不是写教科书,在Blog中也没有写得那么详细的条件。我们这里主要关注在哪个地方对代码进行扩展,可以达到我们想要的效果。比如,我们要创建视图,就是需要扩展org.eclipse.ui.part.ViewPart类,然后向其中添加控件,再然后配置plugin.xml文件,最后修改透视图的代码,以便它能够显示出来。
在ViewPart类中,我们添加控件的操作主要是在public void createPartControl(Composite parent)这个方法中进行,而方法最后会调用以下三个方法: createActions(); initializeToolBar(); initializeMenu();
从这三个方法的方法名我们不难看出,它们的功能是创建视图特有的菜单栏和工具栏的,结合上一小节的内容,我们应该很快就可以探索到怎么给视图添加漂亮的工具栏了,这里我不再罗嗦。
再来看Perspective.java,不难发现,所有的透视图类都需要实现IPerspectiveFactory接口,而该接口的createInitialLayout方法,就是描述工作台窗口中编辑器和视图的布局。默认情况下,透视图中只包含一个编辑器区域,就是我们第一节中看到的那个效果。在
createInitialLayou中,我们可以通过以下几个方法向透视图中添加视图、编辑器和菜单: addView —— 添加视图
addActionSet —— 添加菜单和工具栏
createFolder —— 创建一个IForderLayou,可以让多个视图重叠在同一个位置
写到这里,肯定有人会问,如果我要创建一个象Eclipse中的资源视图这样的视图,该怎么做呢?这我们就要感谢org.eclipse.jface.viewers包了,Viewer,这里翻译为查看器,它和视图是不一样的。JFace查看器是Jface对SWT部件的封装,它简化了我们对小部件的操作。在使用查看器的时候,它的数据使用单独的模型对象来保存,使用查看器的setInput方法可以为查看器设置模型,此外,在使用查看器的时候,需要为它提供ContentProvider(内容提供器)和LabelProvider(标签提供器)。
JFace查看器主要分为以下几类:
1. ListViewer: 对应于SWT的列表控件,目的是将列表中的元素映射至SWT列表控件 2. TreeViewer: 对应于SWT的树控件,提供树的展开和折叠等基本操作 3. TableViewer: 对应于SWT的表控件,映射表中的元素
4. TextViewer: 对应于SWT的StyledText控件,创建编辑器的时候,使用这个查看器是最合适不过了。
好了,介绍性的文字就写到这里,我想大家一定已经知道了探索的方向。下面,我们看一个简单的示例,就是这篇文章开头给出的效果图。它是我模仿医院管理系统做的一个简单例子,左边的视图就是使用了一个ListView查看器。这里给出它的关键代码: 1
public void createPartControl(Composite parent) {
2 3
4 viewer = new ListViewer(parent, SWT.BORDER);
5 viewer.setContentProvider(new PersonContentProvider()); 6 viewer.setLabelProvider(new PersonLabelProvider()); 7 viewer.setInput(new PersonModel()); 8
9 createActions(); 10 initializeToolBar(); 11 initializeMenu(); 12 }
可以看到,这里需要设置内容提供器和标签提供器和模型。下面,我们先创建一个病人类Person.java:
1package cn.blogjava.youxia.views; 2 3
public class Person {
4
5 private String name; 6 private String sex; 7
public String getName() {
8 return name; 9 } 10
public void setName(String name) {
11 this.name = name; 12 } 13
public String getSex() {
14 return sex; 15 } 16
public void setSex(String sex) {
17 this.sex = sex; 18 } 19 20}
下面,创建模型类PersonModel.java,在构造函数中我们向List中填入了几个初始化数据: 1package cn.blogjava.youxia.views; 2import java.util.ArrayList; 3 4
public class PersonModel {
5
6 private ArrayList
public interface Listener{
9 public void add(Person p); 10 public void remove(Person p); 11 }
共分享92篇相关文档