tableviewer setdata to html id,tableViewer用法

TableViewer使用说明

类TableViewer在viewer包下,要在TableViewer这个类的表中显示数据时,要使用内容器和标签器这两个类。内容器(IStructuredContentProvider):它的作用是从集合类中提取对象(在数据库中这个对象是一条记录);标签器(ITableLableProvider):从内容器中提取到的对象中提取出一个字段(在数据库中对应于某一列的一个值)。

1下面是关于TableViewer的使用:

第一步:创建一个TableViewer对象。

TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL);

第二步:通过表格内含的Table对象设置布局方式

Table table = tv.getTable();

table.setHeaderVisible(true); // 显示表头

table.setLinesVisible(true); // 显示表格线

TableLayout layout = new TableLayout(); // 专用于表格的布局

table.setLayout(layout);

第三步:用TableColumn类创建表格列

layout.addColumnData(new ColumnWeightData(13));// ID列宽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("记录建立时间");

第四步:设置内容器和标签器

//标签器

public class TableViewerLabelProviderextends LabelProvider implements ITableLabelProvider{

@Override

public Image getColumnImage(Object element, int columnIndex) {

// TODO Auto-generated method stub

return null;

}

@Override

public String getColumnText(Object element, int columnIndex) {

// TODO Auto-generated method stub

if(element instanceof Person){

Person person = (Person)element;

if(columnIndex == 0){

return person.getId().toString();

}else if(columnIndex == 1){

return person.getName();

}else if(columnIndex ==2){

return person.getSex();

}else if(columnIndex == 3){

return person.getAge().toString();

}else if(columnIndex == 4){

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

return sdf.format(person.getCreateDate());

}

}

return null;

}

}

2现在还可以实现一些扩展的功能:

相关说明和代码如下:

有一个功能是我们常使用的,就是在列的头上点击一下,整个表的记录按照这个列来排序,再点击一下按照这个列的反序来排序。

在JFace中是通过一个排序器来实现的,就是ViewerSorter,下边写出详细的步骤

2.1、定义一个sorter继承自ViewerSorter

package cn.net.easyway.huang.tableViewer;

import java.util.Date;

import org.eclipse.jface.viewers.Viewer;

import org.eclipse.jface.viewers.ViewerSorter;

public class Sorter extends ViewerSorter {

private static final int ID = 1;

private static final int NAME = 2;

private static final int SEX = 3;

private static final int AGE = 4;

private static final int CREATE_DATE = 5;

public static final Sorter ID_ASC = new Sorter(ID);

public static final Sorter ID_DESC = new Sorter(-ID);

public static final Sorter NAME_ASC = new Sorter(NAME);

public static final Sorter NAME_DESC = new Sorter(-NAME);

public static final Sorter SEX_ASC = new Sorter(SEX);

public static final Sorter SEX_DESC = new Sorter(-SEX);

public static final Sorter AGE_ASC = new Sorter(AGE);

public static final Sorter AGE_DESC = new Sorter(-AGE);

public static final Sorter CREATE_DATE_ASC = new Sorter(CREATE_DATE);

public static final Sorter CREATE_DATE_DESC = new Sorter(-CREATE_DATE);

private int sortType ;

private Sorter(int sortType){

this.sortType = sortType;

}

public int compare(Viewer viewer, Object e1, Object e2) {

People p1 = (People)e1;

People p2 = (People)e2;

switch(sortType){

case ID:{

Long l1 = p1.getId();

Long l2 = p2.getId();

return l1.compareTo(l2);

}

case -ID:{

Long l1 = p1.getId();

Long l2 = p2.getId();

return l2.compareTo(l1);

}

case NAME:{

String s1 = p1.getName();

String s2 = p2.getName();

return s1.compareTo(s2);

}

case -NAME:{

String s1 = p1.getName();

String s2 = p2.getName();

return s2.compareTo(s1);

}

case SEX:{

String s1 = p1.getSex();

String s2 = p2.getSex();

return s1.compareTo(s2);

}

case -SEX:{

String s1 = p1.getSex();

String s2 = p2.getSex();

return s2.compareTo(s1);

}

case AGE:{

Integer i1 = p1.getAge();

Integer i2 = p2.getAge();

return i1.compareTo(i2);

}

case -AGE:{

Integer i1 = p1.getAge();

Integer i2 = p2.getAge();

return i2.compareTo(i1);

}

case CREATE_DATE:{

Date d1 = p1.getCreateDate();

Date d2 = p2.getCreateDate();

d1.compareTo(d2);

}

case -CREATE_DATE:{

Date d1 = p1.getCreateDate();

Date d2 = p2.getCreateDate();

d2.compareTo(d1);

}

}

return 0;

}

}

2.2、在TableViewer上,为每一列加入事件监听器类似这样的结构,即在TableViewer的各个newColumnTableCoumn后面加入

newColumnTableColumn.addSelectionListener(new SelectionAdapter(){

boolean asc = true;

public void widgetSelected(SelectionEvent e){

tableViewer.setSorter(asc?Sorter.ID_ASC:Sorter.ID_DESC);

asc = !asc;

}

});

2.2.1,sorter中利用了jdk的compareTo来实现比较,当然也可以根据自己的需求来实现。

2.2.2, sorter中利用了"-"符号来得到正负数字,用来表现升序、降序

3、前边实现了一个表格的基本功能,但这并不够好,下边可以直接编辑的功能。

3.1、要实现这个功能必须提供一个实现ICellModifier的类。内容如下

import org.eclipse.jface.viewers.ICellModifier;

import org.eclipse.jface.viewers.TableViewer;

import org.eclipse.swt.widgets.TableItem;

public class MyCellModifier implements ICellModifier{

private TableViewer tv;

public static String[] NAMES ={"A","B","C","D"};

public MyCellModifier(TableViewer tv){

this.tv = tv;

}

public boolean canModify(Object element, String property) {

return true;

}

public Object getValue(Object element, String property) {

People p = (People)element;

if(property.equals("name")){

return new Integer(getNameIndex(p.getName()));

}else if(property.equals("sex")){

return new Boolean(p.getSex().equals("male"));

}else if(property.equals("age")){

return String.valueOf(p.getAge());

}

throw new RuntimeException("error column name : " + property);

}

private int getNameIndex(String name){

for(int i=0;i

if(NAMES[i].equals(name)){

return i;

}

}

return -1;

}

public void modify(Object element, String property, Object value) {

TableItem item = (TableItem)element;

People p = (People)item.getData();

if (property.equals("name")){

Integer comboIndex = (Integer)value;

if(comboIndex.intValue() == -1){

return ;

}

String newName = NAMES[comboIndex.intValue()];

p.setName(newName);

}else if(property.equals("sex")){

Boolean newValue = (Boolean)value;

System.out.println(newValue);

if(newValue.booleanValue()){

p.setSex("male");

}else{

p.setSex("remale");

}

}else if (property.equals("age")){

String newValue = (String)value;

if(newValue.equals("")){

return ;

}

Integer newAge = new Integer(newValue);

p.setAge(newAge);

}else{

throw new RuntimeException("错误列名:" + property);

}

tv.update(p, null);

}

}

3.2、有了这个类,下一步是如何把它和TestTableViewer关联起来,在TableViewer类中setInput()后加入如下内容

tableViewer.setColumnProperties(new String[]{"id","name","sex","age","createDate"});

CellEditor[] cellEditor = new CellEditor[5];

cellEditor[0] = null;

cellEditor[1] = new ComboBoxCellEditor(tableViewer.getTable(),MyCellModifier.NAMES,SWT.READ_ONLY);

cellEditor[2] = new CheckboxCellEditor(tableViewer.getTable());

cellEditor[3] = new TextCellEditor(tableViewer.getTable());

cellEditor[4] = null;

tableViewer.setCellEditors(cellEditor);

ICellModifier modifier = new MyCellModifier(tableViewer);

tableViewer.setCellModifier(modifier);

//我们让名字这一列用下拉条来编辑,让性别这一列变成类似checkbox的操作,让//年龄这一类变成直接输入

3.3、如果年龄的地方我们输入一个非数字呢,所以为了安全起见,我们加入一个验证器,禁止用户输入非数字

在上边的内容下加入

Text text = (Text)cellEditor[3].getControl();

text.addVerifyListener(new VerifyListener(){

public void verifyText(VerifyEvent e){

String inStr = e.text;

if (inStr.length() > 0){

try{

Integer.parseInt(inStr);

e.doit = true;

}catch(Exception ep){

e.doit = false;

}

}

}

});

4、ViewerFilter这个类是用来进行过滤,如想要显示一些自己需要的记录时,ViewerFilter是一个很好的类,其使用说明如下:

4.1、过滤器代码如下:

import org.eclipse.jface.viewers.Viewer;

import org.eclipse.jface.viewers.ViewerFilter;

public class MyFilter extends ViewerFilter {

public boolean select(Viewer viewer, Object parentElement, Object element) {

People p = (People) element;

return p.getName().startsWith("黄");

}

}

然后在TableViewer的shell.open前加入这个过滤器

tableViewer.addFilter(new MyFilter());

这样过滤器的功能就实现了。

4.2、如果想凸显某一条记录,想改变一下它的颜色,只要把这段代码加入到上面的代码后面就Ok了。

Color color = Display.getDefault().getSystemColor(SWT.COLOR_RED);

table.getItems()[table.getItemCount()-1].setBackground(color);

table.redraw();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值