作者sbrhsieh (十年~)
看板java
標題Re: [問題] JTree 呈現 xml 的階層架構
時間Wed May 1 21:53:19 2013
※ 引述《rudolf1238 (Yo)》之銘言:
: 各位板友好,我想用JTree來呈現xml內的資料,還有一些關於xml的問題,
: 想請教大家,謝謝。
: [略]
: 2. 讀取入JTree時可以指定此節點是集合(資料夾)或個體(單點)嗎?
: 例如使用者現在新增一個Department,但還沒指定Department下面有Emplyee
: 用DefaultTreeModel.insertNodeInto新增個Department的節點會是個前面是
: 黑點的個體而非集合類型的資料夾型態(不知道這樣說會不會懂)
: 想請問能把空集合的子節點在TreeNode上顯示為資料夾型態的樣式嗎?
: 以上兩點疑問請教,謝謝大家。
這種可以設定 cell renderer 的複合物 component,所呈現的子項目的外觀
都是由 renderer 來決定怎麼呈現,所以你應該從客製 tree cell renderer
去下手,假如內建的 LookAndFeel 所提供的 tree cell renderer 表現不出
你要的效果。
一個 tree cell renderer 在決定如何呈現 tree node 的外觀時,通常會考量
tree node 的兩個屬性:
1. 是不是末端的節點/isLeaf()。
2. 可不可有子節點/getAllowsChildren()
比如說以 JTree 呈現檔案結構時,會故意讓檔案與檔案夾所代表的 node
在 getAllowsChildren() 不同(分別是 false/true),而 tree cell renderer
就據以 getAllowsChildren() 的值來決定該 node 要呈現哪種圖示(if any)。
tree cell renderer 當然也可以不管上述兩個 node 屬性,完全由 node 所
帶的 user object 來決定該怎麼呈現 node 外觀。同樣以檔案系統內容為例,
tree node 都是帶著某個 java.awt.File object,cell renderer 就從 File
object 的 isDirectory()/isFile() 來決定要怎麼畫出這個 node。
你要的效果是一定做得到,看你要不要去做而已。
假如你只想要使用內建的 LookAndFeel 所提供的 tree cell renderer,又不想
把自己的手弄太髒去客製 tree cell renderer,那我會建議你在建構
DefaultTreeModel 時,使用兩個參數的建構子,第二個參數(asksAllowsChildren)
給 true 值。
http://ppt.cc/6Xsc
我印象中這樣子內建的 tree cell renderer 就會 honor tree node 的
allowsChildren 屬性。
http://i.imgbox.com/abupPnec.png
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.172.248.120
※ 編輯: sbrhsieh 來自: 1.172.248.120 (05/01 22:06)
推 rudolf1238:解釋得太清楚太厲害了,真的非常感謝sbrhsieh專家!! 05/02 10:14
→ rudolf1238:這就是我想呈現的結果,再次感謝您的幫忙!! 05/02 10:16
→ swpoker:其實就是沒有完全符合你的需求的東西~你得要自己客製 05/02 11:09
→ PsMonkey:唉... 就跟你說 tutorial 裡頭都講了,還非得翻成中文 05/02 11:23
→ PsMonkey:才算幫到你的忙... what the... 05/02 11:23
→ swpoker:樓上有同感~文件裡面都有寫~好好看一下API就可以了拉 05/02 11:25
→ rudolf1238:Sorry,P大也幫很多忙,我太白癡單看treenode api而已 05/02 14:49