前面已經把樹的基本使用、樹的事件和樹的資料取得寫完了,並看了乙個sun提供的最簡單的樹的例子,這一專題我們講兩個方面,乙個是使用樹的renderer和editor構造一棵我們自己的樹;乙個樹使用swingworker完成一棵資源管理器樹的載入.
先看渲染的例子:
我們為我們的樹增加了可用與否、可見與否和節點的屬性,當然你也可以自己新增想要的屬性,比如順序等.
整個實現的過程很清晰,也不複雜,我們首先實現我們自己的treenode,它繼承於
defaultmutabletreenode,
我們在裡面新增自己的屬性
;然後是實現樹的節點的
renderer
和editor,
在renderer
裡我們設定可用也否
,選擇狀態
,節點等;在
editor
裡我們設定樹的容器布局
.最後構造樹時使用
setrenderer
和seteditor
就可以了
,需要注意的是如果僅僅是呈現,設定
renderer
就可以了
,如果除了呈現還有操作的話
,必須都要設定.
先看我們自己的treenode類, 繼承於
defaultmutabletreenode,
/*** the tree node that i rewrite it. */
publicclassmytreenodeextendsdefaultmutabletreenode
publicmytreenode(object userobject,booleanallowschildren,
booleanisselected,booleanenabled,booleanisvisible, icon icon)
然後就是一些設定和取得屬性的方法,這個類就相當於乙個bean.
然後就是rnederer了,我們這裡繼承於
defaulttreecellrenderer
publicclassmytreerendererextendsdefaulttreecellrenderer {
然後複寫它的
gettreecellrenderercomponent方法:
@override
publiccomponent gettreecellrenderercomponent(jtree tree, object value,booleansel,booleanexpanded,booleanleaf,introw,
booleanhasfocus) {
然後設定節點的屬性:
首先是顯示文字:
string strin**alue = tree.convertvaluetotext(value, sel, expanded, leaf, row, hasfocus);
settext(strin**alue);
然後是可用與否:
booleannodeisenabled = ((mytreenode) value).isenabled();
booleanisenabled = (treeisenabled && nodeisenabled);
setenabled(isenabled);
然後是是
icon icon = ((mytreenode) value).geticon();
seticon(icon);
還有一些基本的屬性
,比如背景色等:
setforeground(gettextselectioncolor());
再來需要看的類就是editor了,它繼承於
defaulttreecelleditor:
publicclassmycelleditorextendsdefaulttreecelleditor {
因為我們使用的是
jlabel
作為顯示控制項
,所以我們的主要實現是布局處理
,對於事件可以不需要考慮
.我們複習了
defaulttreecelleditor
的預設布局:
/*** container responsible for placing the editingcomponent. */
privateclassmyeditorcontainerextends
defaulttreecelleditor.editorcontainer {
複寫它的
dolayout
方法:
@override
publicvoiddolayout() {
取得節點的邊緣和大小:
r =
tree
.getbounds(r);
esize.
width
= r.
width
- (offset
* n);
editingcomponent
.setlocation(
offset
, 0);
設定節點的位置和大小:
setsize(newdimension(esize.
width
+ offset
, csize.
height
));
最後就是使用了
,很簡單和以前一樣
,直接使用
jtree
的設定方法就可以了:
mytreerenderer renderer =newmytreerenderer();
tree
.setcellrenderer(renderer);
tree
.seteditable(true);
tree
.setcelleditor(newmycelleditor(
tree,
(defaulttreecellrenderer)
tree
.getcellrenderer()));
YARN資源管理和排程簡介
1 執行在yarn上的mapreduce應用程式 2 執行在yarn上的storm應用程式 3 yarn應用程式基本構成 客戶端 4 以mapreduce應用程式為例 mapreduce客戶端 將mapreduce作業提交到yarn上 查詢mapreduce作業執行狀態 管理mapreduce作業,...
Spring Bean的自動裝配和資源管理
autowiring 在全域性屬性中宣告 default auotowire byname 屬性 no 什麼也不做 byname 根據屬性名稱自動裝配,此選項將檢查容器,並找到名稱和屬性完全一樣的bean,然後將其與屬性自動裝配。若id重複,會報異常。bytype 根據型別自動裝配 屬性型別 同上,...
MTK資源管理和問題解決
使用mtk作開發,常常不可避免和資源打交道,常使用的資源有字串,字型,選單,風格,聲音等,mtk好像沒有系統的專門的資源管理工具,導致資源管理十分凌亂而容易出問題,雖然有些牛人也開發了一些工具來管理這些資源,但由於使用不便或者其他一些原因,比如資源由大量的巨集控制,以及修改維護的人多,還有一些其他各...