java swing jtree_java Swing界面优化JTree教程

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

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

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

1、重写cellRenderer渲染器;

2、消除节点连线;

3、重绘node节点;

4、居左对齐;

5、鼠标特效。

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

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

5f44669d9023f819b9cfa4031178418d.png

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

5f44669d9023f819b9cfa4031178418d.png

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

5f44669d9023f819b9cfa4031178418d.png

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

5f44669d9023f819b9cfa4031178418d.png

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

5f44669d9023f819b9cfa4031178418d.png

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

5f44669d9023f819b9cfa4031178418d.png

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

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

5f44669d9023f819b9cfa4031178418d.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值