RCP之创建视图

下面我们创建一个最基本的视图,表格视图,然后显示用户信息。

我们需要做这样几件事情:

1、在View.java中定义TabelViewer,为该表格视图创建标题,表格的列,同时还需要为它提供ContentProvider和LabelProvider

 

2、就是创建上面的ContentProvider和LabelProvider,这两个class的作用就是为表格视图提供数据的,其中LabelProvider就是将数据对应到表格的列上。

 

3、创建模型,为我们的表格视图提供数据。这里的模型就是一些POJO。

 

下面看看具体代码:

 

 

private UserLabelProvider labelProvider ;
	private TableViewer viewer ;

	public TableViewer getViewer() {
		return viewer;
	}
	
	@Override
	public void createPartControl(Composite parent) {
		GridLayout layout = new GridLayout(1, false);
		parent.setLayout(layout);
		createViewer(parent);
		
		List userList = ModelProvider.getInstance().getUsers() ;
		viewer.setInput(userList);
		getSite().setSelectionProvider(viewer);
		
		GridData gridData = new GridData();
		gridData.verticalAlignment = GridData.FILL;
		gridData.grabExcessHorizontalSpace = true;
		gridData.grabExcessVerticalSpace = true;
		gridData.horizontalAlignment = GridData.FILL;
		viewer.getControl().setLayoutData(gridData);
	}

	private void createViewer(Composite parent){
		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
				| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
		createColumns(viewer);
		viewer.setContentProvider(new UserContentProvider());
		labelProvider = new UserLabelProvider();
		viewer.setLabelProvider(labelProvider);
	}
	
	private void createColumns(final TableViewer viewer){
		Table table = viewer.getTable();
		String[] titles = { "ID","类型", "姓名", "性别","联系方式"};
		int[] bounds = { 50, 100, 100, 50 , 100 } ;
		for (int i = 0; i < titles.length; i++) {
			final int index = i;
			final TableViewerColumn viewerColumn = new TableViewerColumn(
					viewer, SWT.NONE);
			final TableColumn column = viewerColumn.getColumn();
			column.setText(titles[i]);
			column.setWidth(bounds[i]);
			column.setResizable(true);
			column.setMoveable(true);
			viewer.refresh();
		}
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
	}

 这里给出了View.java中的关键属性和方法。

private TableViewer viewer;就是定义表格查看器,createPartControl这个方法是ViewPart中定义的,

我们需要覆盖该方法,以便定义我们自己的视图,在该方法中,我们实例化viewer,并设定布局。

createViewer是具体的实例化viewer的方法,在该方法中还设定了viewer的内容提供者和标签提供者。

createColumns方法是创建表格的列,同时包括定义表格的标题部分。

 

注意:我们需要注意在createPartControl中有这样一行代码:viewer.setInput(userList);

该代码的作用就是设定表格的数据源。

 

另外,我们看看UserContentProvider和UserLabelProvider代码:

 

public class UserContentProvider implements IStructuredContentProvider {
	@Override
	public Object[] getElements(Object inputElement) {
		List list = (List) inputElement;
		System.out.println(list.size());
		return list.toArray();
	}
	@Override
	public void dispose() {
	}
	@Override
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
	}
}

 

 这个class看起来比较简单,它的作用就是将输入转变成一个数组。

 

 

public class UserLabelProvider extends LabelProvider implements
ITableLabelProvider {
	private Color systemColor;
	public UserLabelProvider() {
		systemColor = Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW);
	}
	public String getColumnText(Object element, int columnIndex) {
		System.out.println("执行了方法:");
		TdUser user = (TdUser) element;
		switch (columnIndex) {
		case 0:return user.getSrid().toString() ;
		case 1:return user.getUtype();
		case 2:return user.getName();
		case 3:return user.getSex();
		case 4:return user.getPhone();
		default:throw new RuntimeException("Should not happen");
		}
	}
	@Override
	public Image getColumnImage(Object element, int columnIndex) {
		return null;
	}
}

 

 这个class的作用将模型的数据对应到表格的相应的列上。

至此,一个包含表格查看器的视图创建好了,我们可以看看效果了:

 

RCP之创建视图_第1张图片

 

另外,我们还在ApplicationWorkbenchWindowAdvisor中覆盖了一个方法postWindowCreate

@Override
    public void postWindowCreate() {
    	super.postWindowCreate();
    	Shell shell = getWindowConfigurer().getWindow().getShell();
        Rectangle screenSize = Display.getDefault().getClientArea();
        Rectangle frameSize = shell.getBounds();
        shell.setLocation((screenSize.width - frameSize.width) / 2,
	        		(screenSize.height - frameSize.height) / 2);
    }
 它的作用就是将我们的程序窗口在屏幕上居中显示。


你可能感兴趣的:(RCP,shell,java)