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

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个表时候可以写成内部类:

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 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 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.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; } }

这样就实现了tableview的数据的读取,当然还可以实现一写其他的功能,和细节的改变。

TableView的使用相关推荐

  1. 知识点回顾-简单的TableView单组数据展示/多组数据展示

    1 拖入TableView到UIView中,连线DataSource 2 3 1.实现数据源方法 4 - (NSInteger)tableView:(UITableView *)tableView n ...

  2. ((ios开发学习笔记九)) Simple TableView 实现(附 实例源码)

    实现效果: 实现过程: Step One 创建单个窗体项目 Step Two 创建control 接口 Step Three 创建窗体和关联关系 Step four  实现table view 的接口 ...

  3. xcode 4.3.2 use storyboard创建TableView

    xcode 4.3.2 use storyboard 使用TableView,显示一个颜色列表,表格包括一张图片,一个文本,一行副文本. TableView 呈现列表格式的数据,每一行是一个UITab ...

  4. 取消tableView多余的横线

    - (void)setExtraCellLineHidden: (UITableView *)tableView{     UIView *view = [UIView new];     view. ...

  5. 优雅地分离tableview回调

    你是否遇到过这样的需求,在tableview中显示一列数据,点击某一个cell时,在此cell下显示相应的附加信息.如下图: 你是不是觉得需求很容易实现,只要使用tableview的insertRow ...

  6. swift 4.0 创建tableview 自定义cell

    // // ViewController.swift // AlamofileDemo // // Created by Alex on 2019/3/5. // Copyright © 2019 A ...

  7. iOS下拉tableView实现上面的图片放大效果

    #import "ViewController.h" #define kScreenbounds [UIScreen mainScreen].bounds #define kScr ...

  8. 点击TableView任一行跳转详情页面会跳转两次的解决办法

    在做TableView跳转的时候,发现实际上生成了两个detail view.我 navigate back 的时候,也是先看到一次detail view,然后才回到tableView的. 这是因为: ...

  9. IOS tableView删除数据

    NSMutableArray *_allshops; NSMutableArray *_deleteshops; -(IBAction)remove{ 1. //记录删除的行号 //创建动态数组存放行 ...

  10. 仿QQ空间用一个tableview显示多种自定义cell

    2019独角兽企业重金招聘Python工程师标准>>> 第一部分 要实现效果 先来看看真实QQ空间的效果吧: 从这张截图中,可以看到两种自定义的cell,其实在QQ空间的我的空间中有 ...

最新文章

  1. Makefile文件的编写规则
  2. 剑指Offer名企面试官精讲典型编程题pdf
  3. SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测
  4. win10系统更新补丁时进度条一直卡在0%不动的解决方案
  5. 【iOS10】使用XCode8、Swift3. 操作SQLite3数据库的步骤(包括配置环境和SQLite语句)
  6. 做了个梦,你大爷的,叫什么事啊,吓死我了!
  7. 树莓派3B+64位系统烧制与软件安装
  8. [渝粤教育] 西南科技大学 土木工程施工 在线考试复习资料(2)
  9. MAC上编译OpenCV
  10. 红外图像的特征提取 matab
  11. JavaScript实现哈希表数据结构
  12. 扩展卡尔曼滤波算法——基本原理及举例(python实现radar数据滤波)
  13. java ssh 404,SSH框架上的404异常
  14. 最新顶级OA办公系统源码+CRM客户管理系统+自适应手机
  15. 哪里有免费的ASP空间?
  16. 产品读书.心理学《人际交往心理学》
  17. html5游戏 搭积木,搭积木游戏,搭积木游戏创意名字
  18. 教你彻底卸载MySQL 并重装(保姆级教程 )
  19. 保护海洋主题的微信公众号图文排版必备素材集锦
  20. stm32 GPIOF设置 mode and cnf 第八位输入 01 第零位 输出 01

热门文章

  1. 微信官方开发者工具如何导入小程序源码demo
  2. 烧录软件BlueSuite.WIN.3.3 Installer_3.3.14.1471
  3. @Inject与@Injectable
  4. Linux Shell相关记笔记
  5. 真正的IT技术男是什么样的
  6. cdrom是什么意思_电脑按f8一键出现cdrom:ps-ASUS DVD-e818a4是什么意思
  7. 华侨城集团欲借华侨城A 实现主业整合上市
  8. php fpm 开启status,启用php-fpm状态详解
  9. 牛客练习赛52 B.Galahad (树状数组)
  10. 需求:定义老师和学生类,然后写代码测试;最后找到老师类和学生类当中的共性内容,抽出一个父类,用继承的方式改写代码,并进行测试