<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)論排行榜

    主站蜘蛛池模板: 久久久久久毛片免费看| 四虎影视永久在线精品免费| 亚洲av日韩综合一区在线观看| 亚洲精品成人网站在线观看| 亚洲午夜未满十八勿入| 亚洲中文字幕久久精品无码VA| 久久精品国产亚洲AV| 成人无码精品1区2区3区免费看| 8888四色奇米在线观看免费看| 免费黄色小视频网站| 中文字幕日韩亚洲| 亚洲AV一二三区成人影片| 亚洲AⅤ男人的天堂在线观看 | 99视频有精品视频免费观看| 免费高清在线影片一区| 亚洲AV永久无码精品网站在线观看| 好爽好紧好大的免费视频国产| 久久亚洲国产精品五月天| 99久久综合精品免费| 亚洲成a人片在线观看精品| 中文字幕无线码免费人妻| 亚洲第一中文字幕| 免费精品国产自产拍在 | 好紧我太爽了视频免费国产| 成人男女网18免费视频| 亚洲综合激情另类专区| 亚洲AV成人无码久久WWW| 亚洲一级黄色大片| 韩国18福利视频免费观看| 国产免费福利体检区久久| 亚洲精品不卡视频| 久久国产一片免费观看| 亚洲免费在线播放| 成熟女人特级毛片www免费| 性生大片视频免费观看一级| 亚洲国产第一页www| 天天拍拍天天爽免费视频 | 亚洲午夜在线播放| 深夜国产福利99亚洲视频| 亚洲精品国产精品| a级毛片无码免费真人|