五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > ice:tree應(yīng)用

ice:tree應(yīng)用

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):170    更新時(shí)間:2009-09-12 16:51   參與評(píng)論

樹(shù)是c/s應(yīng)用程序界面上的常見(jiàn)控件,在web上,實(shí)現(xiàn)一棵樹(shù)通常需要css和div的配合,實(shí)現(xiàn)一個(gè)ajax特性的樹(shù)還需要ajax知識(shí)。ice:tree實(shí)現(xiàn)了這些功能。ice:tree的官方文檔參考:
http://facestutorials.icefaces.org/tutorial/tree-tutorial.html。本篇文章要彌補(bǔ)官方指南的不足,解釋清楚對(duì)象模型,并提供一個(gè)接口,幫助簡(jiǎn)化事件攔截機(jī)制。
    在我的應(yīng)用程序中,有一棵樹(shù),根結(jié)點(diǎn)為"標(biāo)準(zhǔn)短語(yǔ)庫(kù)",右鍵選擇該節(jié)點(diǎn)后,可以創(chuàng)建新短語(yǔ)庫(kù),新創(chuàng)建的短語(yǔ)庫(kù)作為根結(jié)點(diǎn)的子節(jié)點(diǎn)。右鍵點(diǎn)擊某個(gè)短語(yǔ)庫(kù),可以選擇”刪除“、“重命名”菜單。左鍵單擊某個(gè)短語(yǔ)庫(kù),右邊表格將顯示短語(yǔ)庫(kù)中的短語(yǔ)。
    ice:tree的value屬性必須通過(guò)getXX方法獲取接口javax.swing.tree.TreeModel。我們可以自己實(shí)現(xiàn)TreeModel,不過(guò)大多數(shù)情況下我們使用javax.swing.tree.DefaultTreeModel類。先來(lái)看一下頁(yè)面代碼:


    DefaultTreeModel對(duì)象要包含一個(gè)根節(jié)點(diǎn)--一個(gè)DefaultMutableTreeNode對(duì)象。DefaultMutableTreeNode類的add方法可以加入子節(jié)點(diǎn)。DefaultMutableTreeNode對(duì)象的setUserObject方法可以讓我們將IceUserObject對(duì)象或者子類對(duì)象放入其中。IceUserObject就是用于存儲(chǔ)樹(shù)節(jié)點(diǎn)的數(shù)據(jù)的,提供了setText,setExpanded等方法。為了方便攔截樹(shù)的點(diǎn)擊事件,我擴(kuò)展了IceUserObject類,可以從后面的代碼中看到。
    private void loadTree() throws DBConnectionException, SQLException {

        DefaultMutableTreeNode rootTreeNode = new DefaultMutableTreeNode();
        MyIceUserObject rootObject = new MyIceUserObject(rootTreeNode);
        rootObject.setText("標(biāo)準(zhǔn)短語(yǔ)庫(kù)");
        rootObject.setExpanded(true);
        rootObject.addTreeEventListener(this);
        rootTreeNode.setUserObject(rootObject);

        treeModel = new DefaultTreeModel(rootTreeNode);

        List libraries = StandardPhraseLibraryManager.load();
        for (StandardPhraseLibrary library : libraries) {
            DefaultMutableTreeNode branchNode = new DefaultMutableTreeNode();
            MyIceUserObject branchObject = new MyIceUserObject(branchNode);
            branchObject.setText(library.getName());
            branchObject.addTreeEventListener(this);
            branchNode.setUserObject(branchObject);
            rootTreeNode.add(branchNode);
        }
    }

    loadTree函數(shù)用于初始化短語(yǔ)庫(kù)樹(shù)的所有節(jié)點(diǎn)。MyIceUserObject的addTreeEventListener將當(dāng)前managed bean的this指針加入到事件偵聽(tīng)列表中,managed bean必須實(shí)現(xiàn)TreeEventListener接口的方法,該方法將會(huì)在發(fā)生了點(diǎn)擊事件的時(shí)候被調(diào)用:
    public void clickItem(MyIceUserObject source) {
        
    }

    現(xiàn)在來(lái)看一下MyIceUserObject類的代碼:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Freebird.Helper;

import com.icesoft.faces.component.tree.IceUserObject;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ActionEvent;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author freebird
 */
public class MyIceUserObject extends IceUserObject{

    public MyIceUserObject(DefaultMutableTreeNode wrapper){
        super(wrapper);
    }

    private List listeners=new ArrayList();

    public void addTreeEventListener(TreeEventListener listener){
        listeners.add(listener);
    }

    private Object data;

    /**
     * @return the data
     */
    public Object getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(Object data) {
        this.data = data;
    }

    public void clickItem(ActionEvent ev){
        for(TreeEventListener listener : listeners){
            listener.clickItem(this);
        }
    }
}

    
TreeEventListener接口代碼如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Freebird.Helper;

/**
 *
 * @author freebird
 */
public interface TreeEventListener {

    public void clickItem(MyIceUserObject source);
}


    關(guān)于右鍵單擊出現(xiàn)上下文菜單的內(nèi)容,在我前面的"ice:panelGroup應(yīng)用"文章中已經(jīng)描述過(guò),這里不再贅述。



如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (170人查看0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)