博学深思慎言笃行
画一年的画,只用一天就能卖出去,画一天的画,要卖一年。
posts - 166, comments - 292, trackbacks - 0, articles - 1
BlogJava
首页
新随笔
联系
管理
聚合
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
MAIL: junglesong@gmail.com
MSN: junglesong_5@hotmail.com
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
(184)
Ajax(3)
CSS(9)
Hibernate
Java API(4)
JavaScript(5)
Java基础(39)
JMS(3)
Maven2之旅(13)
My way(2)
Object Orient Programming(29)
Spring(1)
Swing(9)
Web开发(12)
个人作品(13)
算法数据结构(24)
线程Thread(3)
随想录(15)
随笔档案
(120)
2008年7月 (8)
2008年6月 (8)
2008年5月 (7)
2008年4月 (11)
2008年3月 (6)
2008年2月 (2)
2008年1月 (5)
2007年12月 (8)
2007年11月 (3)
2007年10月 (4)
2007年9月 (8)
2007年8月 (8)
2007年7月 (7)
2007年6月 (34)
2007年4月 (1)
个人软件下载
Sql Anywhere在华军的下载页面
SqlToolBox
文件批量命名器在华军的下载页面
目录文件比较器在华军的下载页面
我的其它博客
我的邻居们
BeanSoft's Java Blog
BlueDavy之技术Blog
CowNew开源团队
DANCE WITH JAVA
David.Turing's blog
fastpace
itkui的博客
Java快速开发平台
Java杂家
Jiangshachina
liaojiyong
Long的博客
Max On Java
mycsdnc#blog
Steady's Java Zone
sterning
zkjbeyond
信拈妙偶
千里冰封
和风细雨
山风小子的博客
庄周梦蝶
朱远翔 的博客
每日一得
点燃闪电
生活源于奋斗不息
翠湖月色
蛟龍居
谈笑有鸿儒,往来无白丁
铁手剑谱
鱼上游
最新随笔
1. 蔓延法判断两个城市的连接状态
2. 用正则表达式找出每个属性对应的值
3. 动态生成日历
4. 日期时间处理实用类
5. java.util.Comparator使用示例
6. 八皇后回溯版
7. 轮圈数数退出问题
8. 泛型单链表类
9. 泛型动态数组类
10. 整形数组实用类,用于求两数组的并交差集
搜索
积分与排名
积分 - 112870
排名 - 66
最新评论
1. re: JTable常见用法细则
谢谢
--膘致男子
2. re: 日期时间处理实用类[未登录]
取得oracle中俩个时间的差的sql语句是什么 具体到时间
--solo
3. re: SqlToolBox 1.60发布,介绍及使用
@如坐春风
好啊,到时别忘了通知我一声。我要好好学JAVA,呵呵
--creasure
4. re: SqlToolBox 1.60发布,介绍及使用
@creasure
是好主意,只是现在时机不太成熟,修改后的版本我会考虑open一下的。
--如坐春风
5. re: SqlToolBox 1.60发布,介绍及使用
@如坐春风
建议你做个opensourc,因为这样就会有更多的朋友来一起做这个,让他更加完善!呵呵
--creasure
阅读排行榜
1. Dom4j下载及使用Dom4j读写XML简介(2867)
2. 程序员四大职业发展方向之比较(2527)
3. 三种权限设计方案的归纳和比较(2165)
4. JTable常见用法细则(2074)
5. 使用commons-fileupload实现单个和多个文件上传(2053)
评论排行榜
1. 程序员四大职业发展方向之比较(13)
2. 程序员之路探究(13)
3. 自己编写的数据库帮助工具(Sql Anythere v1.00) 介绍(12)
4. SqlToolBox 1.60发布,介绍及使用(11)
5. 设计构建一个软件程序的基本步骤探讨(10)
60天内阅读排行
1. 程序员之路探究(1855)
2. 动态代理机制初探(1464)
3. 求两字符串的公共子串(192)
4. 判断数组元素是否存在重复,要求时间复杂度为O(1)(178)
5. 蔓延法判断两个城市的连接状态(156)
利用MouseAdapter来实现自排序的表格
Posted on 2007-07-09 15:58
博学精思慎言笃行
阅读(880)
评论(2)
编辑
收藏
所属分类:
Swing
本文参考了
http://www.java2s.com/Code/Java/Swing-JFC/TableSortTest.htm
的做法。主要处理是取得用户点击的列,得到按此列排序的新数组,删除原有元素,再把新数组加入进表格;如果已经排序,则进行逆序处理。处理完毕后,用户点击表头即可实现排序和逆序。
首先请增加这样三个类:
SortTableMouseAdaptor类:用以排序的关键类。
public
class
SortTableMouseAdaptor
extends
MouseAdapter
{
private
JTable table;
public
SortTableMouseAdaptor(JTable table)
{
this
.table
=
table;
}
public
void
mouseClicked(MouseEvent event)
{
//
check for double
/**/
/*
* if (event.getClickCount() < 2) return;
*/
//
find column of click and
int
tableColumn
=
table.columnAtPoint(event.getPoint());
//
translate to table model index and sort
DefaultTableModel tableModel
=
(DefaultTableModel) table.getModel();
int
rowCount
=
tableModel.getRowCount();
int
cloumnCount
=
tableModel.getColumnCount();
SortTableRow[] tableRowArr
=
new
SortTableRow[rowCount];
int
j;
for
(
int
i
=
0
; i
<
rowCount; i
++
)
{
tableRowArr[i]
=
new
SortTableRow(cloumnCount, tableColumn);
for
(j
=
0
; j
<
cloumnCount; j
++
)
{
tableRowArr[i].setArrValue(j, tableModel.getValueAt(i,j));
}
}
SortCompareColum compareColum
=
new
SortCompareColum(rowCount);
for
(
int
i
=
0
; i
<
rowCount; i
++
)
{
compareColum.setArrValue(i, tableModel.getValueAt(i,tableColumn));
}
tableModel.setRowCount(
0
);
Arrays.sort(tableRowArr);
if
(compareColum.isSorted())
{
List ls
=
Arrays.asList(tableRowArr);
Collections.reverse(ls);
for
(
int
i
=
0
; i
<
ls.size(); i
++
)
{
SortTableRow tableRow
=
(SortTableRow)ls.get(i);
tableModel.addRow(tableRow.getArr());
}
}
else
{
for
(
int
i
=
0
; i
<
tableRowArr.length; i
++
)
{
tableModel.addRow(tableRowArr[i].getArr());
}
}
table.invalidate();
}
}
SortCompareColum类,可以作为SortTableMouseAdaptor类的内部类使用:
public
class
SortCompareColum
{
private
Object[] arr;
public
SortCompareColum(
int
arrLength)
{
arr
=
new
Object[arrLength];
}
public
void
setArrValue(
int
i, Object value)
{
arr[i]
=
value;
}
public
boolean
isSorted()
{
boolean
retval
=
true
;
for
(
int
i
=
0
;i
<
arr.length
-
1
;i
++
)
{
try
{
int
op1
=
Integer.valueOf((String) arr[i]);
int
op2
=
Integer.valueOf((String) arr[i
+
1
]);
retval
=
retval
&&
(op1
-
op2
>
0
?
false
:
true
);
}
catch
(Exception e)
{
String op1
=
(String) arr[i];
String op2
=
(String) arr[i
+
1
];
retval
=
retval
&&
(op1.compareTo(op2)
>
0
?
false
:
true
);
}
}
return
retval;
}
}
SortTableRow类,可以作为SortTableMouseAdaptor类的内部类使用:
public
class
SortTableRow
implements
Comparable
{
private
Object[] arr;
public
int
compareColumnIndex;
public
SortTableRow(
int
arrLength,
int
compareColumnIndex)
{
arr
=
new
Object[arrLength];
;
this
.compareColumnIndex
=
compareColumnIndex;
}
public
void
setArrValue(
int
i, Object value)
{
arr[i]
=
value;
}
public
int
compareTo(Object other)
{
SortTableRow another
=
(SortTableRow) other;
try
{
String op1
=
(String)
this
.getCompareObj();
String op2
=
(String) another.getCompareObj();
int
op3
=
Integer.valueOf(op1);
int
op4
=
Integer.valueOf(op2);
return
op3
-
op4;
}
catch
(Exception ex)
{
String op1
=
(String)
this
.getCompareObj();
String op2
=
(String) another.getCompareObj();
return
op1.compareTo(op2);
}
}
public
Object[] getArr()
{
return
arr;
}
public
Object getCompareObj()
{
return
arr[compareColumnIndex];
}
}
使用时对需要排序的表格进行如下处理就行了,很简单方便:
table.getTableHeader().addMouseListener(
new
SortTableMouseAdaptor(table));
三个类打包下载在此,欢迎试用:
http://www.blogjava.net/Files/sitinspring/sortTable20070712105832.rar
Feedback
#
re: 利用MouseAdapter来实现自排序的表格
回复
更多评论
2007-07-09 17:00 by
交口称赞
学习Java6(九)Table(1)排序表格
http://www.blogjava.net/vip01/archive/2007/05/14/117244.html
java6生成排序表格,推荐看下,算是打个广告
#
re: 利用MouseAdapter来实现自排序的表格
回复
更多评论
2007-07-10 09:15 by
sitinspring
Jdk6的排序表格是不错,就是适用性窄一点,很多人还在1.4下,这时就得自己动手了.
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-07-12 11:03 编辑过
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
相关文章:
JTable常见用法细则
如何让Swing控件如JLabel,JButton等显示动态Gif图片
利用MouseAdapter来实现自排序的表格
一个感观(LookAndFeel)菜单类及其用法
在JTable上点击右键并弹出菜单的实现
封装完毕,能显示当前时间并改变风格的菜单类
博学深思慎言笃行(http://www.blogjava.net)原创,转载请注明出处.