一、TWaver table组件介绍
TWaver table组件继承了Swing中的JTable,并对JTable中的排序、分页和过滤等功能做了加强。TWaver Table Class 结构如下:
ResizableTable:
这是一个可以放缩的表。
TTable:
这类表支持排序,分页,数据过滤,他是TWaver tables(TAlarm Table、TElement Table、TTree Table)的父类。
TElementTable:
这是最经常使用的TWaver表组件,它和DataBox一起使用并能显示每一行中的元素,它支持XML文档。这个类是开发者最推崇的一个类。
TTreeTable:
这个类是TTree和TTable相结合的一个类。实现效果如下图:
二、TWaver table 的使用
1、TWaver table组件的构造器:
TTable() 默认的构造器,构造一张空表
TTable(String tableName) 构造一张定义为TWaver.XML配置名称的表
2、表的基本操作方法
TTable table = newTTable();
TTableModel model = table。GetTableModel(); //获取表的选择模型
model.addRow(new Vector()); //增加一行
model.insertRow(int index, new Vector()); //插入一行
model.removeRow(int index); //删除一行
model.clearPublishedData(); //删除所有公共的数据
model.clearRawData() ; //删除所有的行数据
model.getPublishedData(); //获取所有公共数据,包括不可见的列
model.getCurrentPageData(); //获取当前页中的公共数据,包括不可见的列
3、隐藏表中的列
第一种方法:
TTable table = new TTable();
Table.addColumn(new TTableColumn(“列名”));
Table.getColumnByName(“列名”).setVisible(false);
第二种方法:
Table.setColumnVisibleFilter(new ColumnVisibleFilter(){
Public boolean isVisible(TTableColumn column){
Return !”列名”.equals(column.getName());
}
});
4、锁定表
锁定时,发布的数据将被保留,不管你往表中插入新数据。如果出于解锁时,这行 中的数据将被重新发布
TTableModel model = table.getTableModel();
//加锁
model.lock();
//解锁
Model.unlock();
5、右击选择所有行
*激活右击选择事件的方法:
TTable.setSelectableOnRightClick(true)
*交替更换行颜色:
*隐藏表格线:
//隐藏垂直线
table.setShowVerticalLines(false);
//隐藏水平线
Table.setShowHorizontalLines(false);
6、表格行列的调整:
调整行高:
table.setRowResizable(true);
调整列宽:
table.setColumnResizable(true);
列宽自动调整:
依据表格的宽度和标题的宽度调整列宽为首选宽度.
Table.packAllColumns(true); //调整所有列的宽度
Table.packColumns(table.getTableModel().getColumnByName(“age”),true);//调整选定
的一列宽度。
7、设置表格单元格可编辑
model.getPublishColumn(index).setWrite(true);
例子如下:
8、表格渲染
Twaver提供了很多预定义的渲染器供使用,渲染器所在的包“twaver.table.renderer”.
使用如下:
9、表格排序
TWaver表中的数据可以按列排序,排序方式有递增、递减和无。单击列头可以选择排序模式,按住Ctrl并且选择需要排序的列,能实现多列排序。
l 使用table.setSortable(false)去取消表排序。默认情况下是开启排序的。
l 使用TTableColumn.setSortComparator(java.util.Comparator)自定义排序。
l 设置一列无序table.getTableModel().getColumnByName(“age”).setSortable(false);
10、表格分页
分页原理:启动分页时,所有原始数据模型将被保存在一个原始数据集中。同样,表模型将计算并保存当前数据到另一个公布数据集合中。只有公布数据才能显示在TWaver表组件中,这个过程称作“数据发布”。
Twaver.table.TTableModel类实现了twaver.table.TablePaging接口。我们能从TablePaging接口中获取分页信息。分页信息中包括 每页大小(page size)、当前页码(current page index),总页数(total page)等。
结构图:
TTableModel model = table.getTableModel();
//添加10列数据
for(int i = 0; i < 10; i++){
Vector row = new Vector();
row.addElement(""+i);
row.addElement("Description for index" + i);
model.addRow(row);
}
//设置每页大小
model.setPageRowSize(3);
//设置当前页
model.setCurrentPageIndex(2);
//获取记录总数
model.getPageTotalCount();
添加分页的导航图
//设定几个页数,0表示全部
int[] init = new int[]{20,30,50,0};
TTableNavigator navigator=new TTableNavigator(table.getTableModel(),init,true);
10、操作表中的列
增加列:
删除列:
清除所有列:
代码如下:
11、设置过滤器
过滤第三列颜色不为红色的数据,代码如下:
12、表的监听事件
表的监听事件所在包“twaver.table.TTableListener”,常用的事件有:
l rowClicked
l rowSelectionChanged
l beforeCellValueChanged
l tableUpdated
l lockedChanged
l tableDataChanged
三、元素表组件(Element Table Component)
元素表来自TWaver table,所以它继承了它的许多属性,比如:自定义列,排序,分页,锁,弹出菜单和过滤器等,元素表常用来显示TWaver element objects,元素表连接Databox并从DataBox中获取所有elements元素,并在预定义列中显示出来。
1. 从表中获取元素(Elements)
l 按行的索引值获取元素
TElementTable.getElementByBoxIndex(int row)
l 按记录获取元素
TElementTable.getElementByRowData(Vector rowData)
l 获取published Element
Public List getPublishedElement()
l 获取当前页的元素
Public List getCurrentPageElements()
l 获取选定行中的元素
table.getDataBox().getSelectionModel().getAllSelectedElement();
2. 加载数据
将数据从顶端添加。
table.setConverseIncreaseOrder(true);
3. 设置行总在顶部SendToTop Filter 和总在底部SendToBottom Filter
Public void setSendToTopFilter(SendToTopFilter sendtoFilter)
Public void setSendToBottomFilter(SendToBottomFilter sendToBottomFilter)
4. 设置元素是否可见Visible Filter
List getVisibleFilters()
Void addVisibleFilter(VisibleFilter visibleFilter)
Void removeVisibleFilter(VisibleFilter visibleFilter)
五、 使用树表组件TreeTable Component
1. 树表TreeTable是树和表的组合,
实例:table.xml
<beaninfo>
<attribute
name="name"
displayName="Name"/>
<attribute
clientPropertyKey="age"
displayName="Age"/>
</beaninfo>
定义元素类:Person.java
public class Person extends Node{
public Person(String name,int age){
this.setName(name);
this.putClientProperty("age", age);
}
public int getAge(){
String value= this.getClientProperty("age").toString();
return Integer.valueOf(value).intValue();
}
}
TreeTable.java
//定义TTreeTable
private TDataBox box = new TDataBox("TTable Example!");
TTreeTable table = new TTreeTable(box);
//设置行高
table.setRowHeight(18);
//注册元素
table.registerElementClassXML(Person.class, "/com/twaver/table/table.xml");