本例會實現些效果
[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());
}
});
}
}