科技时代新浪首页 > 科技时代 > 学园 > 正文

野马的性格 Java SE 6.0新特性体验(4)


http://www.sina.com.cn 2006年11月20日 09:06 天极yesky

  五、 表格排序与过滤

  Swing的表格组件在若干方面得到了增强。其中的一个改进是,支持对一个表格中的行数据进行按升/降序排序并且能够过滤掉其中某些行(所有数据来自于表格模型),并最终显示在组件的视图中。

  【请记住】排序和过滤仅对视图有影响,而对模型无影响。

  排序和过滤基于一个新概念—行排序器对象,它能够对行数据进行排序(和过滤)。把一个行排序器加入到一个表格组件中的最简单的方法是调用javax.swing.JTable中新引入的“public void setAutoCreateRowSorter(boolean autoCreateRowSorter)”方法,下面的代码片断演示了它的用法:

TableModel model = createTableModel ();
JTable table = new JTable (model);
table.setAutoCreateRowSorter (true);

  在每次改变模型时,把true传递给setAutoCreateRowSorter()能够使JTable安装一个新的javax.swing.Table.TableRowSorter<M>实例作为行排序器。为了防止在以后改变模型时再创建新的行排序器,可以把false传给一个随后调用的方法。

  注意,当你不想定制行排序器时,你也有可能调用setAutoCreateRowSorter()。但是,在调用这个方法后,你仍然能够定制行排序器,这是通过首先调用JTable的新的“public RowSorter<? extends TableModel> getRowSorter()”方法以返回当前行排序器来实现的。

  因为当你试图把返回的行排序器的引用存储到一个TableRowSorter时编译器会显示一个未检查的警告消息,所以,你可能更喜欢由你自己创建表格行排序器并使用JTable的新的“public void setRowSorter(RowSorter<? extends TableModel> sorter)”方法来安装它:

TableRowSorter<TableModel> sorter;
sorter = new TableRowSorter<TableModel> (model);
table.setRowSorter (sorter);

  对TableRowSorter的定制还包括能够使用它的“public void setRowFilter(RowFilter<? super M,? super I> filter)”方法安装一个行过滤对象(它基于某个标准接收行数据)。这个方法接收一个javax.swing.RowFilter<M,I>参数,其相应的方法能够返回不同种类的行过滤器。

  有些行过滤器可以使用正规表达式。为了获得这种行过滤器,可以调用“RowFilter public static <M,I> RowFilter<M,I> regexFilter(String regex, int... indices)”方法。例如,“sorter.setRowFilter (RowFilter.regexFilter ("^A"));”语句能够创建一个行过滤器,它的“^A”正规表达式仅接受以A开始的行。

  JTable还提供了其它一些与排序和行过滤有关的新方法。这其中的两个是:“public int convertRowIndexToModel(int viewRowIndex)”和“public int convertRowIndexToView(int modelRowIndex)”,它们分别负责把一个行的索引(根据模型)映射到视图和把一个行的索引(根据视图)映射到模型。

  为了向你说明仅是视图为排序和过滤所影响,我使用了前面的TableSortFilterDemo演示应用程序中的一个“convert”方法。在改变行过滤器以后,除了把null传递给TableRowSorter的“public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)”方法以打乱视图的排序外,列表4(见本文示例源程序)中其它的内容我们都已经讨论过。

  在编译和运行这个应用程序后,通过点击某一列的列头部初始化一个排序。作为响应,所有的行按被点击的列值重新升序或降序排列(每次点击使之在升序与降序之间切换)。选择的列和排序顺序以相应列头部的一个向上/向下的箭头指示,如图3所示。

野马的性格JavaSE6.0新特性体验(4)
图3.一个向上箭头表示现在是按升序排序。

  除了排序之外,你还能够安装一个过滤器以决定在视图中显示哪些行。为此,只要在文本域中输入一个正规表达式(例如^J或J),并且点击“Set Filter”按钮即可。作为响应,所有的匹配该正规表达式的行都被以非排序方式显示(见图4)。然后,你可以再对这些行进行排序。

野马的性格JavaSE6.0新特性体验(4)
图4.点击“Set Filter”对过滤的行建立一个未排序的视图。

  六、 结论

  除了上面所讨论的新特征之外,Mustang还提供一个编译器API,一个脚本库,一个Java数据库,在JDBC方面也作了新的改进,XML数字签名,更好的国际化,等功能。其它特征还有待于读者自己去探讨。

[上一页] [1] [2] [3] [4]

本文导航:
·存取权限控制方法
·桌面集成
·以编程方式存取网络参数
·表格排序与过滤

发表评论 _COUNT_条

爱问(iAsk.com) 相关网页共约11,500,000



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2006 SINA Inc. All Rights Reserved

新浪公司 版权所有