我的JTree包装autoTree
2006-9-30完成了JTree的包装工作.
工作需要,我需要一个方便拖动的JAVA树控件;
于是网上寻找:找到了Instrumenter,结果发现虽然它的功能貌似全面,但是不稳定还有很多BUG.然后找到了TreeWrapper,挺漂亮,但是功能似乎并不全面;代码算是比较清晰拉.
没办法只有自己着手写一个了.AutoTree花费2周时间,我对java并不是很熟悉.dnd,transfer都是头一次用,对transfer的理解到现在还是不清晰.不过一点点做么,再加上参考些网上的例程.最困难的时候是主体功能出来了但还存在不少BUG和缺陷的那阵,实在不想做了,于是去看了火影忍者休息休息ZZZzzzz.作程序压力还是很大的.特别是写一些初次接触的代码,可能一天内只要有两三个电话.或者一个杂事就会让你什么也写不下去了.一个电话之后原先的思路就可以RELOAD了.
AutoTree包含dnd功能,和剪切删除复制粘贴快捷键;目前还缺少UNDO,REDO也就是前进后退功能;
另外附带一个CellRender的例子.可以使你每个DefaultMutableTreeNode拥有各自不同的图标;
运行环境:JRE5.0;
这里是演示:请尝试托拽功能,Applet下存在闪烁.剪切复制粘贴的快捷键也无法使用.但如果下载作为应用程序运行这些问题就都不存在了.
这里是下载:down! 下载后双击即可运行.
使用说明:在您的代码中加入new AutoTree(youTree);这个树就具备托拽以及复制粘贴的能力了;
需要注意的事情:
1.对树进行包装之前,必须把树的renderer,model什么的都设置好.否则可能失效;
2.树节点必须是DefaultMutableTreeNode继承的,因为DefaultMutableTreeNode完全适应我的需求,我希望复用它;
3.TreeModel必须是DefaultTreeModel.这也许是美中不足吧,也许你有自己的TreeModel如果它不是继承自DefaultTreeModel那么还是放弃使用这个AutoTree吧.
4.树的根节点是不显示的,也就是对你的JTree调用了setRootVisible(false).至于为什么,原因很多.JTree是单根的,所以当对根节点进行操作时候必须另外处理(比如给一个空树拖入个根?在根上按delete了之类).我懒得写也觉得没必要.就像xml是单根一样,根节点必然是<xml>觉得这样也没给大家带来多少不便.所以AutoTree的根节点就当它是xml了,隐了.
5.新发现Applet版本的会闪烁.可能里边在重绘时sleep了50,或许也需要优化一下,Applet仅仅是个演示.而且它的应用在国内好像并不是很广泛,JFC情况下闪烁就感觉不到,所以无关紧要了.
Labels: JAVA