WEB开发网
开发学院WEB开发Jsp TableView的使用 阅读

TableView的使用

 2009-12-30 21:09:49 来源:WEB开发网   
核心提示:项目现在基本出了一个版本,虽然做的是边缘工作,TableView的使用,但是用到的东西还是整理一下吧,毕竟也算学了一点点东西,并装入List集合返回 public class PeopleFactory { public static List<PeopleEntity> getPeoples() { //
项目现在基本出了一个版本,虽然做的是边缘工作,但是用到的东西还是整理一下吧,毕竟也算学了一点点东西。首先是TableView的使用。RWT是SWT的子集,因此,RWT中可能没有完全实现SWT的全部接口,也没有SWT那么完善。两者的架构不同,表现在显示形式,界面也不尽相同,但是基本的控件的时候还是相同的。这里首先通过SWT来学习一些常用控件的使用。

      首先说下SWT需要的库文件。包括: org.eclipse.swt_3.x.x.jar     org.eclipse.jface_3.x.x.jar  


   org.eclipse.core.runtime_3.x.x.jar     org.eclipse.ui.workbench_3.x.x.jar (org.eclipse.equinox.common_3.x.x.jar)另外这个包中也包含org.eclipse.core.runtime 感觉组织的有点混乱,这个包也要导入。另外版本的不同也可能出现要包导入错误,注意下版本。

下面的代码就是Tableview的创建,是从《eclipse入门到精通》引用的


+ expand sourceview plaincopy to clipboardPRint?
import org.eclipse.jface.viewers.ColumnWeightData;  
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 TableViewer1 {  
  public static void main(String[] args) {  
    new TableViewer1().open();  
  }  
  public void open() {  
    final Display display = new Display();  
    final Shell shell = new Shell();  
    shell.setSize(500, 150);  
    // ------------------------------------------  
    shell.setLayout(new FillLayout());  
    // 第一步:创建一个TableViewer对象。式样:MULTI可多选、H_SCROLL有水平滚动条、V_SCROLL有垂直滚动条、BORDER有边框、FULL_SELECTION整行选择  
    TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);  
    // 第二步:通过表格内含的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("记录建立时间");  
    // 第四步:设置内容器和标签器  
    tv.setContentProvider(new TableViewerContentProvider());  
    tv.setLabelProvider(new TableViewerLabelProvider());  
    // 第五步:用TableViewer的setInput方法将数据输入到表格  
    Object data = PeopleFactory.getPeoples();  
    tv.setInput(data);  
    // ------------------------------------------  
    shell.open();  
    while (!shell.isDisposed()) {  
      if (!display.readAndDispatch())  
        display.sleep();  
    }  
    display.dispose();  
  }  
} 
import org.eclipse.jface.viewers.ColumnWeightData;
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 TableViewer1 {
public static void main(String[] args) {
new TableViewer1().open();
}
public void open() {
final Display display = new Display();
final Shell shell = new Shell();
shell.setSize(500, 150);
// ------------------------------------------
shell.setLayout(new FillLayout());
// 第一步:创建一个TableViewer对象。式样:MULTI可多选、H_SCROLL有水平滚动条、V_SCROLL有垂直滚动条、BORDER有边框、FULL_SELECTION整行选择
TableViewer tv = new TableViewer(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
// 第二步:通过表格内含的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("记录建立时间");
// 第四步:设置内容器和标签器
tv.setContentProvider(new TableViewerContentProvider());
tv.setLabelProvider(new TableViewerLabelProvider());
// 第五步:用TableViewer的setInput方法将数据输入到表格
Object data = PeopleFactory.getPeoples();
tv.setInput(data);
// ------------------------------------------
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}




 


下面分别是那2个提供类,这2个在类如果代码较少,服务与1个表时候可以写成内部类:

view plaincopy to clipboardprint?
import java.util.List;  
import org.eclipse.jface.viewers.IStructuredContentProvider;  
import org.eclipse.jface.viewers.Viewer;  
//内容器。由此类对输入到表格的数据进行筛选和转化。  
//此类要实现接口的三种方法, 其中getElements是主要方法,另外两个方法很少用到,空实现就行了  
public class TableViewerContentProvider implements IStructuredContentProvider {  
  // 对输入到表格的数据集合进行筛选和转。  
  // 输入的数据集全部要转化成数组,每一个数组元素就是一个实体类对象,也就是表格中的一条记录。  
  public Object[] getElements(Object element) {  
    // 参数element就是通过setInput(Object input)输入的对象input,本例中输入给setInput是List集合  
    if (element instanceof List)// 加一个List类型判断  
      return ((List) element).toArray(); // 将数据集List转化为数组  
    else 
      return new Object[0]; // 如非List类型则返回一个空数组  
  }  
  // 当TableViewer对象被关闭时触发执行此方法  
  public void dispose() {  
  }  
  // 当TableViewer再次调用setInput()时触发执行此方法  
  public void inputChanged(Viewer v, Object oldInput, Object newInput) {  
  }  
} 
import java.util.List;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
//内容器。由此类对输入到表格的数据进行筛选和转化。
//此类要实现接口的三种方法, 其中getElements是主要方法,另外两个方法很少用到,空实现就行了
public class TableViewerContentProvider implements IStructuredContentProvider {
// 对输入到表格的数据集合进行筛选和转。
// 输入的数据集全部要转化成数组,每一个数组元素就是一个实体类对象,也就是表格中的一条记录。
public Object[] getElements(Object element) {
// 参数element就是通过setInput(Object input)输入的对象input,本例中输入给setInput是List集合
if (element instanceof List)// 加一个List类型判断
return ((List) element).toArray(); // 将数据集List转化为数组
else
return new Object[0]; // 如非List类型则返回一个空数组
}
// 当TableViewer对象被关闭时触发执行此方法
public void dispose() {
}
// 当TableViewer再次调用setInput()时触发执行此方法
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
}

view plaincopy to clipboardprint?
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/refresh.gif"),  
      new Image(null, "icons/star.jpg"),  
      new Image(null, "icons/moon.jpg") };  
  // 由此方法决定数据记录在表格的每一列显示什么文字。  
  // element参数是一个实体类对象。col是当前要设置的列的列号,0是第一列。  
  public String getColumnText(Object element, int col) {  
    PeopleEntity o = (PeopleEntity) element; // 类型转换  
    if (col == 0)// 第一列要显示什么数据  
      return o.getId().toString();  
    if (col == 1)  
      return o.getName();  
    if (col == 2)  
      return o.isSex() ? "男" : "女";  
    if (col == 3)  
      return String.valueOf(o.getAge()); // 将int型转为String型  
    if (col == 4)  
      return o.getCreateDate().toString();  
    return null; // 方法可以返回空值  
  }  
  // getColumnText方法用于显示文字,本方法用于显示图片。  
  public Image getColumnImage(Object element, int col) {  
    PeopleEntity o = (PeopleEntity) element;  
    // 只让“陈刚”这条记录显示图片  
    if (o.getName().equals("陈刚") || o.getName().equals("周阅")) {  
      if (col == 0)// 第一列要显示的图片  
        return images[0];  
      if (col == 2)// 根据性别显示不同的图标  
        return o.isSex() ? images[1] : images[2];  
    }  
    return null; // 方法可以返回空值  
  }  
  public void dispose() {  
    // 别忘了SWT组件的原则:自己创建,自释放  
    for (Image image : images) {  
      image.dispose();  
    }  
  }  
  // -------------以下方法很少使用,先不用管,让它们空实现-----------------  
  public boolean isLabelProperty(Object element, String property) {  
    return false;  
  }  
  public void addListener(ILabelProviderListener listener) {  
  }  
  public void removeListener(ILabelProviderListener listener) {  
  }  
} 
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/refresh.gif"),
new Image(null, "icons/star.jpg"),
new Image(null, "icons/moon.jpg") };
// 由此方法决定数据记录在表格的每一列显示什么文字。
// element参数是一个实体类对象。col是当前要设置的列的列号,0是第一列。
public String getColumnText(Object element, int col) {
PeopleEntity o = (PeopleEntity) element; // 类型转换
if (col == 0)// 第一列要显示什么数据
return o.getId().toString();
if (col == 1)
return o.getName();
if (col == 2)
return o.isSex() ? "男" : "女";
if (col == 3)
return String.valueOf(o.getAge()); // 将int型转为String型
if (col == 4)
return o.getCreateDate().toString();
return null; // 方法可以返回空值
}
// getColumnText方法用于显示文字,本方法用于显示图片。
public Image getColumnImage(Object element, int col) {
PeopleEntity o = (PeopleEntity) element;
// 只让“陈刚”这条记录显示图片
if (o.getName().equals("陈刚") || o.getName().equals("周阅")) {
if (col == 0)// 第一列要显示的图片
return images[0];
if (col == 2)// 根据性别显示不同的图标
return o.isSex() ? images[1] : images[2];
}
return null; // 方法可以返回空值
}
public void dispose() {
// 别忘了SWT组件的原则:自己创建,自释放
for (Image image : images) {
image.dispose();
}
}
// -------------以下方法很少使用,先不用管,让它们空实现-----------------
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void addListener(ILabelProviderListener listener) {
}
public void removeListener(ILabelProviderListener listener) {
}
}




另外就是实体类,这里只是简单的写了一个实体,这里的数据可以从数据库中读取,但是那样注意数据的存储使用的容器类型,

并注意类型的转换。

view plaincopy to clipboardprint?
import java.util.Date;  
//本类包含五个不同数据类型的变量,分别对应数据库表中的五个字段。变量为private型,即只能  
//由类的内部代码访问,外界只能通过这些变量相应的Setter/Geter方法来访问它们  
public class PeopleEntity {  
  private Long id; //惟一识别码,在数据库里常为自动递增的ID列  
  private String name; //姓名  
  private boolean sex; //性别 true男,flase女  
  private int age; //年龄  
  private Date createDate; //记录的建立日期。Date类型是java.util.Date,而不是java.sql.Date  
    
  //以下代码为字段各自的Setter/Geter方法。参考第3.5.2节,这些方法在Eclipse可自动生成。  
  public Long getId() { return id;}  
  public void setId(Long long1) {id = long1;}  
  public String getName() {return name;}  
  public void setName(String string) {name = string;}  
  public boolean isSex() { return sex;}  
  public void setSex(boolean sex) { this.sex = sex; }  
  public int getAge() {return age;}  
  public void setAge(int i) {age = i;}  
  public Date getCreateDate() {return createDate;}  
  public void setCreateDate(Date date) {createDate = date;}  
} 
import java.util.Date;
//本类包含五个不同数据类型的变量,分别对应数据库表中的五个字段。变量为private型,即只能
//由类的内部代码访问,外界只能通过这些变量相应的Setter/Geter方法来访问它们
public class PeopleEntity {
private Long id; //惟一识别码,在数据库里常为自动递增的ID列
private String name; //姓名
private boolean sex; //性别 true男,flase女
private int age; //年龄
private Date createDate; //记录的建立日期。Date类型是java.util.Date,而不是java.sql.Date

//以下代码为字段各自的Setter/Geter方法。参考第3.5.2节,这些方法在Eclipse可自动生成。
public Long getId() { return id;}
public void setId(Long long1) {id = long1;}
public String getName() {return name;}
public void setName(String string) {name = string;}
public boolean isSex() { return sex;}
public void setSex(boolean sex) { this.sex = sex; }
public int getAge() {return age;}
public void setAge(int i) {age = i;}
public Date getCreateDate() {return createDate;}
public void setCreateDate(Date date) {createDate = date;}
}




另外是封装的获取数据的接口:

view plaincopy to clipboardprint?
import java.util.ArrayList;  
import java.util.Date;  
import java.util.List;  
//创建PeopleEntity对象的工厂,创建三个PeopleEntry对象,并装入List集合返回  
public class PeopleFactory {  
  public static List<PeopleEntity> getPeoples() { // 工厂的静态方法  
    List<PeopleEntity> list = new ArrayList<PeopleEntity>();  
    { // 第1个实体类对象  
      PeopleEntity o = new PeopleEntity();  
      o.setId(new Long(1));// id字段的类型被定义成了Long,所以要转化一下  
      o.setName("陈刚");  
      o.setSex(true);  
      o.setAge(28);  
      o.setCreateDate(new Date()); // 当前日期  
      list.add(o);  
    }  
    { // 第2个实体类对象  
      PeopleEntity o = new PeopleEntity();  
      o.setId(2L); // 利用JDK5.0的自动装箱功能,省了long到Long对象的转化  
      o.setName("周阅");  
      o.setSex(false);  
      o.setAge(18);  
      o.setCreateDate(new Date());  
      list.add(o);  
    }  
    { // 第3个实体类对象  
      PeopleEntity o = new PeopleEntity();  
      o.setId(3L);  
      o.setName("陈常恩");  
      o.setSex(true);  
      o.setAge(27);  
      o.setCreateDate(new Date());  
      list.add(o);  
    }  
    return list;  
  }  
} 



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/youxigogo/archive/2009/12/30/5105179.aspx

Tags:TableView 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接