经常看到有人打听如何实现JTreeTable,即Swing的树表组件。今天又有朋友问这个问题。我抽时间在网上搜了一下,就找出很多实现方法来,其中一个是来自Sun官方网站的解决方案。其基本思路使用JTree作为JTable中一列的TableCellRenderer和TableCellEditor。这个方法简单实用,是个不错的实现方法。这篇文章在:

http://java.sun.com/products/jfc/tsc/articles/treetable1/index.html

JTree是一个大的组件,而JTable的每个Cell画的仅仅是JTree的一个节点,如何让自定义的TableCellRenderer只画出对应Cell部分的树的节点呢?这个方法中有个技巧,下面是他们给出的方法:

代码

 

按照上面JTree的setBounds方法,JTable调用JTree的setBounds方法设置位置时,重载的setBounds方法将JTree定位于当前栏的起始坐标。这样当前单元格的JTree节点正是所需的节点了。另外图形上下文对象g坐标空间需要平移到当前格,由于g的剪裁区域已经设置为当前格,因此绘制出来的节点正是所需的JTree的节点。 另外还有一个技巧是树那列的所有cell使用的renderer component和editor component都是同一棵树,并且该列的所有单元格都是可编辑的。

 

希望对你有用,代码在这儿下载

 

评论:

好久没过来,每次拜读您的文章总是有收获。。。
谢谢

发表于 bluewoods 在 2007年10月18日, 12:03 上午 CST #

的确是简洁明快!

发表于 tommyjian 在 2007年10月18日, 08:15 上午 CST #

楼主,对你那个界面设计器挺感兴趣的,能否再介绍介绍。。

发表于 herui 在 2007年10月18日, 08:56 上午 CST #

herui,

好啊,以后再写文章,目前也正在整理。现在可以在原来的地方下载最新的代码。现在支持基类是JFrame的设计。代码也做了进一步优化。

发表于 williamchen 在 2007年10月18日, 03:55 下午 CST #

我觉得LZ可以发起一个即时通信的项目,因为即时通信画面都比较特殊需要很多技巧,可以介绍很多swing的特点。
甚至还可以构建一个即时通信UI基础框架,目前swing这方面开源实现都很少。

发表于 mmu 在 2007年10月18日, 04:40 下午 CST #

mmu,
主意不错,本来我想如果有时间的话,可以把luma qq改造成swing版,一定能做的比标准的qq漂亮。这样可以方便在*nix下工作的朋友。但问题是精力有限。

发表于 williamchen 在 2007年10月18日, 04:54 下午 CST #

其实LZ可以慢慢做,就像你前面写的那个设计器。但是如果做这个可能对很多人帮助更大。因为目前java swing在这方面的开源项目寥寥无几,能找到的也不是很棒。
java已经有一些不错的库通信
JML http://sourceforge.net/project/showfiles.php?group_id=118829
Smack
http://www.igniterealtime.org/downloads/index.jsp

LZ可以主要的贡献就是交互,GUI.正好还可以介绍大量的swing技巧。

支持LZ

发表于 mmu 在 2007年10月18日, 05:52 下午 CST #

支持LZ打造和googletalk,msn,qq沟通的即时通信软件。
据说luma qq通信和GUI部分实现的没有那么分离。不然别人发布一个和QQ通信的java库就好了,省的挖掘它了。

发表于 mmu 在 2007年10月18日, 05:58 下午 CST #

LZ还可以发展出一推java swing用于即时通信方面的GUI组件,这真是功德无量啊。

发表于 mmu 在 2007年10月18日, 06:05 下午 CST #

强烈支持开发一个*ux下的QQ软件,那个lumaQQ界面不是很好.而且如果楼主真的决定做的话,我想大家都会乐意参与进来,一起解决一些问题的. 呵呵. 非常期待.

另外感谢楼主提醒我用netbeans的profile工具,以前一直没用过,今天对着netbeans的在线帮助学着用了下,功能真的非常强大!

发表于 hqhhq 在 2007年10月18日, 07:44 下午 CST #

大家对我的期望也太高了,让我感到前所未有的压力:)
常恨自己没有出生在欧洲,把计算机编程是当作艺术创作,而不是生存的饭碗。在中国我们大部分人只能是选择牛肉而不是苹果啊,我还是非常明白这点的,因此只能说以后如果有时间的话,绝不负大家所望。

发表于 williamchen 在 2007年10月18日, 08:09 下午 CST #

这是渲染器,编辑器也可以类似实现吗?单元格在使用渲染器的时候,是对每个创建还是其它方式,会不会有效率上的影响?

发表于 222.78.52.3 在 2007年10月22日, 09:52 下午 CST #

很早之前在sun的官方网站上也看到过treetable的swing实现,98年的时候就写了,好像就是这个哦!

虽然现在中国的程序员是在为饭碗写程序,但我们还是希望有苹果来吃吃。只要有合适的机会,合适的发起者,合适的场合。而你,weilei,在这个地方,是最合适的。

发表于 HEDY 在 2007年10月23日, 09:34 上午 CST #

不知道怎么样能JMF做的播放器弄一个漂亮的UI呢

发表于 Tommylee 在 2007年10月23日, 04:06 下午 CST #

发表一条评论:
  • HTML语法: 禁用

This blog copyright 2009 by williamchen