【Swing入门教程】一步一步做Netbeans(4):JTree的使用及定制TreeCellRenderer

      下一步我们要做什么呢,其实我是想早点睡觉;我一直有个愿望,希望能在12点之前睡觉,每次都被我硬生生的拖到12点以后,我一直认为12点之前睡觉是浪费时间,会有一种负罪感。那都是学生时代养成的习惯,那时晚睡没关系,第二天可以补回来。然而,工作了觉是补不回来的。

      JTree是Swing里一个很重要的组件,要详细讲的话起码要N个教程。我这就偷工减料,况且我对JTree的理解也只是入门阶段,还是不误人子弟的好。接下来我们要实现Netbeans中项目的文件树列表,这个非JTree莫选了。按惯例,先看下效果:

文件树效果

      有几点做的不好:

      1:根节点还在。或许你说用setRootVisible(false)不就行了。这样虽然根节点看不见了,但是下面主节点前的小加号都没了,这个暂时还不知道怎么解决,希望各位给点意见。

      2:顺序有点乱,和Netbeans中的顺序不一样。我是采用JTree的默认排序,它是按字母排序的;而Netbeans的规律是文件夹在前,文件在后。

      3:节点的图标和文件名的距离过近。这个就是图标的问题了,Netbeans图标的右边肯定留了一些空白,他有两套图标,另一套是给有版本控制用的(右边多了个小标志)。

      废话不多说了,上代码;先在"文件"面板上放入JTree,通过initTree()来初始化:

      initTree()中重要的是如何通过文件夹来初始化JTree的节点,里面用到的一个递归函数;在学校时递归函数没理解好,还在里面绕了一小会:

     这样一颗文件树就构造好了,只是树节点的图标都是JTree默认的图标,和Netbeans的不一样。于是不得不为JTree定制渲染器了,至少把图标改一下嘛:

   

       需要为JTree指定TreeCellRenderer,initTree()中的188行加入:

搞定收工。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章