丶男儿当自强的gravatar头像
丶男儿当自强2015-05-31 14:42:49

java Swing界面优化JTree教程

大家好,今天来给大家说说jtree的优化,江郎才尽,这次是对swing的个人分享最后一个组件了。

详细地址:http://www.iteye.com/topic/1138211

扯点题外话,最近分享代码的过程中,有一些朋友提到“不要重复造轮子”,大家肯定不会反驳这句话,因为说的很对,但是我们必须知道轮子是怎么造出来的呢,万一哪天轮子坏了,人家又不给可咋办?

好了,不多说了,还是先说一下优化思路:

1、重写cellRenderer渲染器;

2、消除节点连线;

3、重绘node节点;

4、居左对齐;

5、鼠标特效。

来几张图片,大家看看如何一步步的优化:

原生态jtree,不多说,放在这里只是为了让大家对优化过后的界面,能有更好的理解

java Swing界面优化JTree教程

重写渲染器,这里需要注意,从根节点开始为一级节点,getLevel方法从0开始,我的代码里面DemoNode为了简单,就没有拆分成两个node,而是通过getLevel方法判断从而返回不同的UI

java Swing界面优化JTree教程

去掉连接线,实现这个效果很简单,直接调用JTree.putClientProperty("JTree.lineStyle", "None")即可,这里将其作为一个步骤来讲解,是因为在第四步中也可以实现这个效果,所以需要注意避免重复

java Swing界面优化JTree教程

基本OK了,但是我们还需要来一个好友签名,继承DefaultMutableTreeNode重绘节点UI,这里重绘的node节点,jtree的渲染器在加载jtree列表时会来调用

java Swing界面优化JTree教程

上面几步完成之后我们看到的效果已经差不多了,但是若是加上边框,大家是不是发现了什么?对,就是连接线去掉了,但是位置却没有让出来

java Swing界面优化JTree教程

继承BasicTreeUI,重写里面的四个方法:paintVerticalLine、paintHorizontalLine、setLeftChildIndent、setRightChildIndent,我们看到这两个单词Vertical、Horizontal是不是熟悉,水平和垂直,这就和第二步中的去掉连接线有联系了,二者取其一,第二步中若是去除了连接线,第四步就可以不需要了

java Swing界面优化JTree教程

OK,大家将边框线条去掉,就可以看到一个完美的jtree了。

第五步,我们来追求一下完美,加上鼠标特效

java Swing界面优化JTree教程

思考:大家看了代码之后会发现,鼠标特效的过程缺陷很大,因为有嵌套for循环,所以当节点很多的时候效率就会有些低下了,这里最完美的办法是将鼠标事件加入到重绘的node节点UI上,可惜经过测试发现事件只能加在jtree上,因为节点经过渲染器之后,本身的事件竟然生效不了了,好忧伤,若是有朋友发现有好的方法可以告诉我一声,感激不尽


打赏

文件名:course.rar,文件大小:331.79K下载
  • /
      • /course
        • /course/.classpath
        • /course/.project
          • /course/image
            • /course/image/arrow_down.png
            • /course/image/arrow_left.png
            • /course/image/avatar.png
            • /course/image/back0.png
            • /course/image/back1.png
            • /course/image/back2.jpg
            • /course/image/back3.jpg
            • /course/image/back4.jpg
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友