TWaver学习之TTable篇

一、TWaver table组件介绍

TWaver table组件继承了Swing中的JTable,并对JTable中的排序、分页和过滤等功能做了加强。TWaver Table Class 结构如下:

 

ResizableTable:

这是一个可以放缩的表。

TTable:

这类表支持排序,分页,数据过滤,他是TWaver tablesTAlarm TableTElement TableTTree Table)的父类。

TElementTable:

这是最经常使用的TWaver表组件,它和DataBox一起使用并能显示每一行中的元素,它支持XML文档。这个类是开发者最推崇的一个类。

TTreeTable

这个类是TTreeTTable相结合的一个类。实现效果如下图:

 

二、TWaver table 的使用

         1TWaver table组件的构造器:

                   TTable()   默认的构造器,构造一张空表

                   TTable(String tableName)   构造一张定义为TWaver.XML配置名称的表

         2、表的基本操作方法

                   TTable table = newTTable();

                   TTableModel model = tableGetTableModel(); //获取表的选择模型

 

                   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");

          

你可能感兴趣的:(数据结构,xml,swing)