分享
 
 
 

TableView的使用

王朝学院·作者佚名  2009-12-31
窄屏简体版  字體: |||超大  

项目现在基本出了一个版本,虽然做的是边缘工作,但是用到的东西还是整理一下吧,毕竟也算学了一点点东西。首先是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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有