JFace TableViewer初入

[align=center]TableViewer初入[/align]
本例会实现些效果

[img]/upload/attachment/58535/9b140e23-d3c3-3c82-8be6-ce8077157ed3.jpg[/img]
右键菜单

[img]/upload/attachment/58537/e337047b-a66d-311d-bb32-671073129f27.gif[/img]
双击一行

[img]/upload/attachment/58545/2bccc6b5-c272-3fca-8534-975ec157afd5.gif[/img]


首先新建PeopleEntity,此类为假想数据表entity

package com.mypractice;

import java.util.Date;

public class PeopleEntity {

private Long id;

private String name;

private boolean sex;

private int age;

private Date createDate;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getCreateDate() {
return createDate;
}

public void setCreateDate(Date createDate) {
this.createDate = createDate;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

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

public boolean isSex() {
return sex;
}

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

然后创建PeopleFactory,用来生成PeopleEntity

package com.mypractice;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class PeopleFactory {

public static List<PeopleEntity> getPeoples() {
List<PeopleEntity> list = new ArrayList<PeopleEntity>();
{
PeopleEntity o = new PeopleEntity();
o.setId(new Long(1));
o.setName("赵云");
o.setSex(true);
o.setAge(28);
o.setCreateDate(new Date());
list.add(o);
}

{
PeopleEntity o = new PeopleEntity();
o.setId(new Long(2));
o.setName("关羽");
o.setSex(true);
o.setAge(20);
o.setCreateDate(new Date());
list.add(o);
}
{
PeopleEntity o = new PeopleEntity();
o.setId(new Long(3));
o.setName("曹操");
o.setSex(true);
o.setAge(23);
o.setCreateDate(new Date());
list.add(o);
}
{
PeopleEntity o = new PeopleEntity();
o.setId(new Long(4));
o.setName("张飞");
o.setSex(false);
o.setAge(30);
o.setCreateDate(new Date());
list.add(o);
}
return list;
}
}

创建OpenAction,生成右键菜单"打开"
package com.mypractice;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;

public class OpenAction extends Action {

private TableViewer tv;

public OpenAction(TableViewer tv) {
this.tv = tv;
setText("打开");
}

public void run() {
IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
PeopleEntity o = (PeopleEntity) selection.getFirstElement();
if(o == null)
MessageDialog.openInformation(null, null, "请先选择记录");
else
MessageDialog.openInformation(null, null, o.getName());
}
}

创建RefreshAction类 生成右键菜单"刷新"
package com.mypractice;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.TableViewer;

public class RefreshAction extends Action {

private TableViewer tv;

public RefreshAction(TableViewer tv) {
this.tv = tv;
setText("刷新");
}

public void run() {
tv.refresh();//表格的刷新方法,界面会重新读取数据并显示
}
}

创建MyActionGroup 管理Action
package com.mypractice;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.actions.ActionGroup;

public class MyActionGroup extends ActionGroup {

private TableViewer tv;

public MyActionGroup(TableViewer tv) {
this.tv = tv;
}

public void fillContextMenu(IMenuManager mgr) {
MenuManager menuManager = (MenuManager) mgr;
menuManager.add(new OpenAction(tv));
menuManager.add(new RefreshAction(tv));

Table table = tv.getTable();
Menu menu = menuManager.createContextMenu(table);
table.setMenu(menu);
}
}

创建TableViewerContentProvider 内空提供器,用来对输入到表格的数据进行过滤

package com.mypractice;

import java.util.List;

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

public class TableViewerContentProvider implements IStructuredContentProvider {

public Object[] getElements(Object inputElement) {
if(inputElement instanceof List)
return ((List) inputElement).toArray();
return new Object[0];
}

/**
* 当TableViewer对象被关闭时触发执行此方法
*/
public void dispose() {

}

/**
* 当TableViewer再次调用setInput()时触发此方法执行
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

}

}

创建TableViewerLabelProvider 对单个对象进行处理和转化,决定实体显示位置
package com.mypractice;

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

public class TableViewerLabelProvider implements ITableLabelProvider {

private Image[] images = new Image[]{
new Image(null, "icons/star.gif"),
new Image(null, "icons/refresh.gif"),
new Image(null, "icons/3.gif")
};

public Image getColumnImage(Object element, int columnIndex) {
PeopleEntity o = (PeopleEntity) element;
if(o.getName().equals("赵云") || o.getName().equals("张飞")) {
if(columnIndex == 0)
return images[0];
if(columnIndex == 2)
return o.isSex() ? images[1] : images[2];
}
return null;
}

public String getColumnText(Object element, int columnIndex) {
PeopleEntity o = (PeopleEntity) element;
if(columnIndex == 0)
return o.getId().toString();
if(columnIndex == 1)
return o.getName();
if(columnIndex == 2)
return o.isSex() ? "男" : "女";
if(columnIndex == 3)
return String.valueOf(o.getAge());
if(columnIndex == 4)
return o.getCreateDate().toString();
return null;
}

public void addListener(ILabelProviderListener listener) {

}

public void dispose() {
for(Image image : images) {
image.dispose();
}
}

public boolean isLabelProperty(Object element, String property) {
return false;
}

public void removeListener(ILabelProviderListener listener) {

}
}

最后创建ShowTable
package com.mypractice;

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

public class ShowTable {

public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER
| SWT.FULL_SELECTION);
Table table = tv.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout layout = new TableLayout();
table.setLayout(layout);

layout.addColumnData(new ColumnWeightData(13));
new TableColumn(table, SWT.NONE).setText("ID号");

layout.addColumnData(new ColumnWeightData(40));
new TableColumn(table, SWT.NONE).setText("姓名");

layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("性别");

layout.addColumnData(new ColumnWeightData(20));
new TableColumn(table, SWT.NONE).setText("年龄");

layout.addColumnData(new ColumnWeightData(60));
new TableColumn(table, SWT.NONE).setText("记录建立时间");

tv.setContentProvider(new TableViewerContentProvider());

tv.setLabelProvider(new TableViewerLoabelProvider());
Object data = PeopleFactory.getPeoples();

tv.setInput(data);
ShowTable show = new ShowTable();
show.addListener(tv);

MyActionGroup actionGroup = new MyActionGroup(tv);
actionGroup.fillContextMenu(new MenuManager());
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}

private void addListener(TableViewer tv) {
tv.addDoubleClickListener(new IDoubleClickListener(){

public void doubleClick(DoubleClickEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
PeopleEntity o = (PeopleEntity) selection.getFirstElement();

MessageDialog.openInformation(null, "提示", o.getName());
}

});

//选择事件(单击)
tv.addSelectionChangedListener(new ISelectionChangedListener() {

public void selectionChanged(SelectionChangedEvent event) {
// IStructuredSelection selection = (IStructuredSelection) event.getSelection();
// PeopleEntity o = (PeopleEntity) selection.getFirstElement();
// MessageDialog.openInformation(null, "提示", o.getName() + "年龄是" + o.getAge());
}

});
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值