<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zeyuphoenix

    愿我愛的人快樂,愿愛我的人快樂,為了這些,我愿意不快樂.

    JTree--樹(節(jié)點(diǎn)渲染和資源管理器加載)(一)

    前面已經(jīng)把樹的基本使用、樹的事件和樹的數(shù)據(jù)取得寫完了,并看了一個(gè)Sun提供的最簡單的樹的例子,這一專題我們講兩個(gè)方面,一個(gè)是使用樹的RendererEditor構(gòu)造一棵我們自己的樹;一個(gè)樹使用SwingWorker完成一棵資源管理器樹的加載.

    先看渲染的例子:

    我們?yōu)槲覀兊臉湓黾恿丝捎门c否、可見與否和節(jié)點(diǎn)圖片的屬性,當(dāng)然你也可以自己添加想要的屬性,比如順序等.

    整個(gè)實(shí)現(xiàn)的過程很清晰,也不復(fù)雜,我們首先實(shí)現(xiàn)我們自己的TreeNode,它繼承于DefaultMutableTreeNode,我們?cè)诶锩嫣砑幼约旱膶傩?/span>;然后是實(shí)現(xiàn)樹的節(jié)點(diǎn)的RendererEditor,Renderer里我們?cè)O(shè)置可用也否,選擇狀態(tài),節(jié)點(diǎn)圖片等;Editor里我們?cè)O(shè)置樹的容器布局.最后構(gòu)造樹時(shí)使用setRenderersetEditor就可以了,需要注意的是如果僅僅是呈現(xiàn),設(shè)置Renderer就可以了,如果除了呈現(xiàn)還有操作的話,必須都要設(shè)置.

    先看我們自己的TreeNode, 繼承于DefaultMutableTreeNode,

    /**

     * the tree node that I rewrite it.

    */

    publicclass MyTreeNode extends DefaultMutableTreeNode {

    我們添加了屬性:

        /** is select or not. */

        privatebooleanisSelected = false;

    節(jié)點(diǎn)的選擇狀態(tài)

        /** is enable. */

        privatebooleanenabled = false;

    節(jié)點(diǎn)使用與否

        /** is visible or not. */

        privatebooleanisVisible = false;

    節(jié)點(diǎn)可見與否

        /** it's icon. */

        private Icon icon = null;

        /** icon name. */

        private String iconName = null;

    節(jié)點(diǎn)圖片和圖片名字

    然后是構(gòu)造函數(shù),我們初始化屬性,或使用默認(rèn)的:

    public MyTreeNode() {

        this(null, true, false, true, true, null);

    }

    public MyTreeNode(Object userObject, boolean allowsChildren,

        boolean isSelected, boolean enabled, boolean isVisible, Icon icon) {

        super(userObject, allowsChildren);

        this.isSelected = isSelected;

        this.enabled = enabled;

        this.isVisible = isVisible;

        this.icon = icon;

           setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTI

     ON);

    }

    然后就是一些設(shè)置和取得屬性的方法,這個(gè)類就相當(dāng)于一個(gè)Bean.

    然后就是Rnederer,我們這里繼承于DefaultTreeCellRenderer

    publicclass MyTreeRenderer extends DefaultTreeCellRenderer {

    然后復(fù)寫它的getTreeCellRendererComponent方法:

    @Override

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,

         boolean hasFocus) {

    然后設(shè)置節(jié)點(diǎn)的屬性:

    首先是顯示文本:

    String stringValue = tree.convertValueToText(value, sel, expanded, leaf, row, hasFocus);

    setText(stringValue);

    然后是可用與否:

           boolean nodeIsEnabled = ((MyTreeNode) value).isEnabled();

           boolean isEnabled = (treeIsEnabled && nodeIsEnabled);

           setEnabled(isEnabled);

    然后是是圖片

        Icon icon = ((MyTreeNode) value).getIcon();

    setIcon(icon);

    還有一些基本的屬性,比如背景色等:

        setForeground(getTextSelectionColor());

    再來需要看的類就是Editor,它繼承于DefaultTreeCellEditor:

    publicclass MyCellEditor extends DefaultTreeCellEditor {

    因?yàn)槲覀兪褂玫氖?/span>JLabel作為顯示控件,所以我們的主要實(shí)現(xiàn)是布局處理,對(duì)于事件可以不需要考慮.我們復(fù)習(xí)了DefaultTreeCellEditor的默認(rèn)布局:

        /**

         * Container responsible for placing the editingComponent.

         */

        privateclass MyEditorContainer extends

               DefaultTreeCellEditor.EditorContainer {

    復(fù)寫它的doLayout方法:

        @Override

    publicvoid doLayout() {

    取得節(jié)點(diǎn)的邊緣和大小:

    r = tree.getBounds(r);

    eSize.width = r.width - (offset * n);

    editingComponent.setLocation(offset, 0);

    設(shè)置節(jié)點(diǎn)的位置和大小:

         setSize(new Dimension(eSize.width + offset, cSize.height));

    最后就是使用了,很簡單和以前一樣,直接使用JTree的設(shè)置方法就可以了:

          MyTreeRenderer renderer = new MyTreeRenderer();

          tree.setCellRenderer(renderer);

          tree.setEditable(true);

          tree.setCellEditor(new MyCellEditor(tree,

               (DefaultTreeCellRenderer) tree.getCellRenderer()));

    posted on 2010-04-21 21:36 zeyuphoenix 閱讀(2867) 評(píng)論(0)  編輯  收藏 所屬分類: JTree的使用

    導(dǎo)航

    <2010年4月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    統(tǒng)計(jì)

    常用鏈接

    留言簿(52)

    隨筆分類

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 无码专区AAAAAA免费视频| 亚洲午夜无码久久久久小说 | 最近中文字幕国语免费完整| 日韩精品免费视频| 久久久精品免费视频| 在线成人精品国产区免费| a毛片视频免费观看影院| 国产免费网站看v片在线| 一个人免费视频观看在线www| 东方aⅴ免费观看久久av| 久草视频在线免费看| 美女内射无套日韩免费播放| 亚洲精品乱码久久久久久中文字幕| 亚洲精品无码永久在线观看 | 久久久久亚洲AV无码去区首| 风间由美在线亚洲一区| 国产亚洲漂亮白嫩美女在线| 暖暖免费中文在线日本 | 亚洲伦理一二三四| 亚洲xxxx视频| 香蕉视频亚洲一级| 久久久久久噜噜精品免费直播| 怡红院免费全部视频在线视频| 99爱视频99爱在线观看免费| 四虎在线最新永久免费| 成人毛片免费在线观看| 免费一级毛片女人图片| 啦啦啦中文在线观看电视剧免费版| 成人人观看的免费毛片| 免费在线观看黄网| 国产亚洲婷婷香蕉久久精品| 亚洲国产精品yw在线观看| 亚洲国产成人无码AV在线影院| 日韩在线视频免费| 男女午夜24式免费视频| 国产大片线上免费观看| 无码欧精品亚洲日韩一区夜夜嗨| av无码免费一区二区三区| 永久黄网站色视频免费直播| 国产L精品国产亚洲区久久| 亚洲AV无码乱码在线观看牲色|