Eclipse RCP开发入门学习笔记——03.视图

本文介绍如何使用Eclipse RCP创建自定义视图,包括FirstView和SecondView的实现过程,从视图类编写到Perspective布局调整,再到ListView的构建,并配置了自定义视图标签样式。

------------------------------------------------------------------------------------------------

学习: http://www.blogjava.net/youxia/archive/2006/11/24/83377.html

------------------------------------------------------------------------------------------------

 

1. 编写 FirstView 类:

package hellorcp.view;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;

public class FirstView extends ViewPart {
	private Table table;
	private Text text_1;
	private Text text;
	public static final String ID = "hellorcp.views.FirstView"; //$NON-NLS-1$

	/**
	 * Create contents of the view part
	 * 
	 * @param parent
	 */
	@Override
	public void createPartControl(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);

		final Label label = new Label(container, SWT.NONE);
		label.setText("姓名:");
		label.setBounds(56, 41, 36, 12);

		text = new Text(container, SWT.BORDER);
		text.setBounds(98, 38, 80, 15);

		final Label label_1 = new Label(container, SWT.NONE);
		label_1.setText("性别:");
		label_1.setBounds(212, 41, 30, 12);

		text_1 = new Text(container, SWT.BORDER);
		text_1.setBounds(252, 38, 80, 15);

		final TableViewer tableViewer = new TableViewer(container, SWT.BORDER);
		// tableViewer.setInput(new Object());
		table = tableViewer.getTable();
		table.setBounds(56, 75, 374, 143);
		table.setItemCount(10);
		table.setLinesVisible(true);
		//
		createActions();
		initializeToolBar();
		initializeMenu();
	}

	/**
	 * Create the actions
	 */
	private void createActions() {
		// Create the actions
	}

	/**
	 * Initialize the toolbar
	 */
	private void initializeToolBar() {
		IToolBarManager toolbarManager = getViewSite().getActionBars()
				.getToolBarManager();
	}

	/**
	 * Initialize the menu
	 */
	private void initializeMenu() {
		IMenuManager menuManager = getViewSite().getActionBars()
				.getMenuManager();
	}

	@Override
	public void setFocus() {
		// Set the focus
	}

}

 

2. 修改 Perspective.java:

package hellorcp;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		String editorArea = layout.getEditorArea();
		layout.addView("hellorcp.view.FirstView", IPageLayout.RIGHT, 0.2f,
				editorArea);
	}
}

 

3. 编辑plugin.xml,增加如下代码片段:

   <extension
         point="org.eclipse.ui.views">
         <view
         	class="hellorcp.view.FirstView"
         	id="hellorcp.view.FirstView"
         	name="第一个view" />
   </extension>

 

4. 运行程序,效果如下:

 

 

5. 自定义视图标签样式:

1) 新增文件 plugin_customization.ini ,内容如下:

org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight

 2) 修改 plugin.xml: 找到如下片段:

   <extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="HelloRCP.application"
            name="RCP Application">

 

加入以下片段:

         <property
               name="preferenceCustomization"
               value="plugin_customization.ini">
         </property>

 

3) 保存,运行,效果无变化(plugin_customization.ini放在项目根目录下,应放在哪里?);

 

6. 构建1个ListView:

1) 新建Person Bean类:

package hellorcp.view;

public class Person {

	private String name;
	private String sex;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

}

 

 

2) 新建 PersonModel 类:

package hellorcp.view;

import java.util.ArrayList;

public class PersonModel {
	private ArrayList<Person> list = new ArrayList<Person>();

	public interface Listener {
		public void add(Person p);

		public void remove(Person p);
	}

	private Listener listener;

	public PersonModel() {
		// 向list里面填入几个初始化数据
		Person p1 = new Person();
		p1.setName("病人1");
		p1.setSex("男");
		list.add(p1);

		Person p2 = new Person();
		p2.setName("病人2");
		p2.setSex("女");
		list.add(p2);

	}

	public void setListener(Listener listener) {
		this.listener = listener;
	}

	public void add(Person p) {
		list.add(p);
		if (listener != null) {
			listener.add(p);
		}
	}

	public void remove(Person p) {
		list.remove(p);
		if (listener != null) {
			listener.remove(p);
		}
	}

	public ArrayList elements() {
		return list;
	}

}

 

3) 实现内容提供器(实现了PersonModel中定义的Listener接口):

package hellorcp.view;

import hellorcp.view.PersonModel.Listener;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.Viewer;

public class PersonContentProvider implements IStructuredContentProvider,
		Listener {
	PersonModel input;
	ListViewer viewer;

	public Object[] getElements(Object inputElement) {
		// TODO 自动生成方法存根
		return input.elements().toArray();
	}

	public void dispose() {
		// TODO 自动生成方法存根
		if (input != null) {
			input.setListener(null);
		}
		input = null;

	}

	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		// TODO 自动生成方法存根
		viewer = (ListViewer) viewer;
		input = (PersonModel) newInput;
		input.setListener(this);

	}

	public void add(Person p) {
		// TODO 自动生成方法存根
		viewer.add(p);
	}

	public void remove(Person p) {
		// TODO 自动生成方法存根
		viewer.remove(p);
	}

}

 

4) 实现标签提供器(用于显示列表元素——Person类的对象):

package hellorcp.view;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;

public class PersonLabelProvider implements ILabelProvider {

	public Image getImage(Object element) {
		return null;
	}

	public String getText(Object element) {
		// TODO 自动生成方法存根
		return ((Person) element).getName();
	}

	public void addListener(ILabelProviderListener listener) {
		// TODO 自动生成方法存根
	}

	public void dispose() {
		// TODO 自动生成方法存根

	}

	public boolean isLabelProperty(Object element, String property) {
		// TODO 自动生成方法存根
		return false;
	}

	public void removeListener(ILabelProviderListener listener) {
		// TODO 自动生成方法存根
	}

}

 

5) 新建SecondView:

package hellorcp.view;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

public class SecondView extends ViewPart {

	public void createPartControl(Composite parent) {
		ListViewer viewer = new ListViewer(parent, SWT.BORDER);
		viewer.setContentProvider(new PersonContentProvider());
		viewer.setLabelProvider(new PersonLabelProvider());
		viewer.setInput(new PersonModel());

		createActions();
		initializeToolBar();
		initializeMenu();
	}

	private void createActions() {
		// Create the actions
	}

	private void initializeToolBar() {
		IToolBarManager toolbarManager = getViewSite().getActionBars()
				.getToolBarManager();
	}

	private void initializeMenu() {
		IMenuManager menuManager = getViewSite().getActionBars()
				.getMenuManager();
	}

	public void setFocus() {
		// Set the focus
	}

}

 

6) 修改 Perspective.java, 修改后的 Perspective.java:

package hellorcp;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		// FirstView
		String editorArea = layout.getEditorArea();
		layout.addView("hellorcp.view.FirstView", IPageLayout.RIGHT, 0.2f,
				editorArea);

		// SecondView
		layout.setEditorAreaVisible(false);
		layout.addView("hellorcp.view.SecondView", IPageLayout.RIGHT, 0.5f,
				editorArea);
	}

}

 

7) plugin.xml 中增加 SecondView 配置,增加后的片段为:

   <extension
         point="org.eclipse.ui.views">
         <view
         	class="hellorcp.view.FirstView"
         	id="hellorcp.view.FirstView"
         	name="第一个view" />
         <view
         	class="hellorcp.view.SecondView"
         	id="hellorcp.view.SecondView"
         	name="第二个view" />
   </extension>

 

8) 保存,运行,效果如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值