ice:tree應用

來源:互聯網
上載者:User

樹是c/s應用程式介面上的常見控制項,在web上,實現一棵樹通常需要css和div的配合,實現一個ajax特性的樹還需要ajax知識。ice:tree實現了這些功能。ice:tree的官方文檔參考:

http://facestutorials.icefaces.org/tutorial/tree-tutorial.html。本篇文章要彌補官方指南的不足,解釋清楚物件模型,並提供一個介面,協助簡化事件攔截機制。

    在我的應用程式中,有一棵樹,根結點為"標準短語庫",右鍵選擇該節點後,可以建立新短語庫,新建立的短語庫作為根結點的子節點。右鍵點擊某個短語庫,可以選擇”刪除“、“重新命名”菜單。左鍵單擊某個短語庫,右邊表格將顯示短語庫中的短語。
    ice:tree的value屬性必須通過getXX方法擷取介面javax.swing.tree.TreeModel。我們可以自己實現TreeModel,不過大多數情況下我們使用javax.swing.tree.DefaultTreeModel類。先來看一下頁面代碼:

    DefaultTreeModel對象要包含一個根節點--一個DefaultMutableTreeNode對象。DefaultMutableTreeNode類的add方法可以加入子節點。DefaultMutableTreeNode對象的setUserObject方法可以讓我們將IceUserObject對象或者子類對象放入其中。IceUserObject就是用於儲存樹節點的資料的,提供了setText,setExpanded等方法。為了方便攔截樹的點擊事件,我擴充了IceUserObject類,可以從後面的代碼中看到。
    private void loadTree() throws DBConnectionException, SQLException {

        DefaultMutableTreeNode rootTreeNode = new DefaultMutableTreeNode();
        MyIceUserObject rootObject = new MyIceUserObject(rootTreeNode);
        rootObject.setText("標準短語庫");
        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函數用於初始化短語庫樹的所有節點。MyIceUserObject的addTreeEventListener將當前managed bean的this指標加入到事件偵聽列表中,managed bean必須實現TreeEventListener介面的方法,該方法將會在發生了點擊事件的時候被調用:
    public void clickItem(MyIceUserObject source) {
        
    }

    現在來看一下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);
}

    關於按右鍵出現操作功能表的內容,在我前面的"ice:panelGroup應用"文章中已經描述過,這裡不再贅述。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.