JTable表头排序的两种方法

[b]关键词:JTable,表头排序,线程安全[/b]

在Java6以前,关于JTable的表头排序是一件非常费力的事情,因为很多复杂的工作都要自己去做,但到了Java6,表头排序就变得非常简单了就一行代码:setRowSorter(new TableRowSorter<TableModel>(defaultTableModel));不过我经过实验,发现这个方法其实不怎么好用:
1.[b]速度比较慢,进行表头排序的时候,总觉得页面刷新有些迟缓[/b]。
2.[b]点击表头的响应速度太慢了[/b]。用比较快的速度点表头,很多时候页面根本不响应点击事件。
3.[b]表头的排序箭头是默认的,比较难看[/b]。

造成以上问题的原因无非有两个,一个是TableRowSorter类比较新,没有进行优化,二是对TableRowSorter类认识不够。

下面说一下Java5及一下版本中的表头排序
Java5一下进行表头排序,必须要写很多的代码~~~,不过这样也有好处,就是式样和效率可以自己控制,所以自己写的表头排序比Java6默认的TableRowSorter好看很多,也快很多,这就复杂一些也是值得的,下面比较一下二者的表现差异。
下图是[b]java5的表头排序[/b]画面:
[img]http://www.kutoku.info/images/java/101012/table5.png[/img]

下图是[b]java6的表头排序[/b]画面:
[img]http://www.kutoku.info/images/java/101012/table6.png[/img]
怎么样,我们根据ID排序,利用自己的表头排序样式好看一些,速度和相应明显比使用TableRowSorter好很多。

Java5中完成表头排序的代码是比较多的也比较复杂,我想这也是为什么Java6对它进行包装的原因吧,我这里只列出构造函数的代码,更完整的代码见附件
[code]
public ZTableJava5(TableModel dm) {
super(dm, null, null);

JTableHeader jtableheader = getTableHeader();
jtableheader.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent event) {
if (event.getSource() == getTableHeader()) {
getTableHeader().removeMouseListener(this);
int i = columnAtPoint(event.getPoint());
int j = convertColumnIndexToModel(i);

if (!columnIsSortable(j)) {
return;
}
if (j == sortColumn) {
ascending = !ascending;
} else {
ascending = true;
sortColumn = j;
}

EventQueue.invokeLater(new Runnable() {
public void run() {
sort();
}
});

getTableHeader().addMouseListener(this);
}
}
});
jtableheader.setDefaultRenderer(createHeaderRenderer());
if (getRowCount() > 0) {
EventQueue.invokeLater(new Runnable() {
public void run() {
reinitialize();
}
});
}
// setRowSorter(new TableRowSorter<TableModel>(defModel));
}
[/code]
Java6中完成表头排序的代码非常简单:
[code]
public ZTableJava6(TableModel dm) {
super(dm, null, null);

DefaultTableModel defModel = (DefaultTableModel) getModel();
setRowSorter(new TableRowSorter<TableModel>(defModel));
}
[/code]

完整的程序请参考附件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值