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());
}

});
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章