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

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

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

    kooyee ‘s blog

    開源軟件, 眾人努力的結(jié)晶, 全人類的共同財(cái)富
    posts - 103, comments - 55, trackbacks - 0, articles - 66
       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    在TreeContentProvider加入新的getAllChildren(Object arg0) method
    public List getAllChildren(Object arg0){
          List allChildren 
    = new ArrayList();
          
    //get all children and add to the List called allChildren 
          getAllChildren(arg0, allChildren);
          
    return allChildren;
      }

      
      
    public void getAllChildren(Object arg0, List arg1){
          
    if(this.hasChildren(arg0)){
              
    for(Object child : this.getChildren(arg0)){
                  System.out.println(
    "parent: "+ arg0 +"    children: "+child);
                  
    //add node to the list
                  arg1.add(child);
                  
    //expand to next level of tree
                  getAllChildren(child, arg1);
              }

          }

      }

     

    以后直接調(diào)用getAllChildren(Object arg0) 的到含有all children的list




    ContainerCheckedTreeViewer與 CheckboxTreeViewer區(qū)別

    從ContainerCheckedTreeViewer的源代碼可以看出它繼承于CheckboxTreeViewer。但是當(dāng)ContainerCheckedTreeViewer的父節(jié)點(diǎn)被選中時(shí),對(duì)應(yīng)的子節(jié)點(diǎn)會(huì)自動(dòng)選中。 而起這個(gè)類還提供了父節(jié)點(diǎn)的灰選狀態(tài)當(dāng)不是全部子節(jié)點(diǎn)選中時(shí)。
    (其他的區(qū)別還未發(fā)現(xiàn),歡迎補(bǔ)充!)

    import java.util.ArrayList ;
    14 
    15 import org.eclipse.jface.viewers.CheckStateChangedEvent;
    16 import org.eclipse.jface.viewers.CheckboxTreeViewer;
    17 import org.eclipse.jface.viewers.ICheckStateListener;
    18 import org.eclipse.jface.viewers.ITreeViewerListener;
    19 import org.eclipse.jface.viewers.TreeExpansionEvent;
    20 import org.eclipse.swt.widgets.Composite;
    21 import org.eclipse.swt.widgets.Item;
    22 import org.eclipse.swt.widgets.Tree;
    23 import org.eclipse.swt.widgets.TreeItem;
    24 import org.eclipse.swt.widgets.Widget;
    25 
    26 /**
    27  * Copied from ui internal package.
    28  * 
    29  * CheckboxTreeViewer with special behaviour of the checked / gray state on 
    30  * container (non-leaf) nodes:
    31  * The grayed state is used to visualize the checked state of its children.
    32  * Containers are checked and non-gary if all contained leafs are checked. The
    33  * container is grayed if some but not all leafs are checked.
    34  * 
    35  
    */

    36 public class ContainerCheckedTreeViewer extends CheckboxTreeViewer {
    37 
    38     /**
    39      * Constructor for ContainerCheckedTreeViewer.
    40      * 
    @see CheckboxTreeViewer#CheckboxTreeViewer(Composite)
    41      
    */

    42     public ContainerCheckedTreeViewer(Composite parent) {
    43         super(parent);
    44         initViewer();
    45     }

    46 
    47     /**
    48      * Constructor for ContainerCheckedTreeViewer.
    49      * 
    @see CheckboxTreeViewer#CheckboxTreeViewer(Composite,int)
    50      
    */

    51     public ContainerCheckedTreeViewer(Composite parent, int style) {
    52         super(parent, style);
    53         initViewer();
    54     }

    55 
    56     /**
    57      * Constructor for ContainerCheckedTreeViewer.
    58      * 
    @see CheckboxTreeViewer#CheckboxTreeViewer(Tree)
    59      
    */

    60     public ContainerCheckedTreeViewer(Tree tree) {
    61         super(tree);
    62         initViewer();
    63     }

    64 
    65     private void initViewer() {
    66         setUseHashlookup(true);
    67         addCheckStateListener(new ICheckStateListener() {
    68             public void checkStateChanged(CheckStateChangedEvent event) {
    69                 doCheckStateChanged(event.getElement());
    70             }

    71         }
    );
    72         addTreeListener(new ITreeViewerListener() {
    73             public void treeCollapsed(TreeExpansionEvent event) {
    74             }

    75 
    76             public void treeExpanded(TreeExpansionEvent event) {
    77                 Widget item = findItem(event.getElement());
    78                 if (item instanceof TreeItem) {
    79                     initializeItem((TreeItem) item);
    80                 }

    81             }

    82         }
    );
    83     }

    84 
    85     protected void doCheckStateChanged(Object  element) {
    86         Widget item = findItem(element);
    87         if (item instanceof TreeItem) {
    88             TreeItem treeItem = (TreeItem) item;
    89             treeItem.setGrayed(false);
    90             updateChildrenItems(treeItem);
    91             updateParentItems(treeItem.getParentItem());
    92         }

    93     }

    94 
    95     /**
    96      * The item has expanded. Updates the checked state of its children. 
    97      
    */

    98     private void initializeItem(TreeItem item) {
    99         if (item.getChecked() && !item.getGrayed()) {
    100             updateChildrenItems(item);
    101         }

    102     }

    103 
    104     /**
    105      * Updates the check state of all created children
    106      
    */

    107     protected void updateChildrenItems(TreeItem parent) {
    108         Item[] children = getChildren(parent);
    109         boolean state = parent.getChecked();
    110         for (int i = 0; i < children.length; i++{
    111             TreeItem curr = (TreeItem) children[i];
    112             if (curr.getData() != null
    113                     && ((curr.getChecked() != state) || curr.getGrayed())) {
    114                 curr.setChecked(state);
    115                 curr.setGrayed(false);
    116                 updateChildrenItems(curr);
    117             }

    118         }

    119     }

    120 
    121     /**
    122      * Updates the check / gray state of all parent items
    123      
    */

    124     private void updateParentItems(TreeItem item) {
    125         if (item != null{
    126             Item[] children = getChildren(item);
    127             boolean containsChecked = false;
    128             boolean containsUnchecked = false;
    129             for (int i = 0; i < children.length; i++{
    130                 TreeItem curr = (TreeItem) children[i];
    131                 containsChecked |= curr.getChecked();
    132                 containsUnchecked |= (!curr.getChecked() || curr.getGrayed());
    133             }

    134             item.setChecked(containsChecked);
    135             item.setGrayed(containsChecked && containsUnchecked);
    136             updateParentItems(item.getParentItem());
    137         }

    138     }

    139 
    140     /*
    141      * @see ICheckable#setChecked(Object, boolean)
    142      
    */

    143     public boolean setChecked(Object  element, boolean state) {
    144         if (super.setChecked(element, state)) {
    145             doCheckStateChanged(element);
    146             return true;
    147         }

    148         return false;
    149     }

    150 
    151     /*
    152      * @see CheckboxTreeViewer#setCheckedElements(Object[])
    153      
    */

    154     public void setCheckedElements(Object [] elements) {
    155         super.setCheckedElements(elements);
    156         for (int i = 0; i < elements.length; i++{
    157             doCheckStateChanged(elements[i]);
    158         }

    159     }

    160 
    161     /*
    162      * @see AbstractTreeViewer#setExpanded(Item, boolean)
    163      
    */

    164     protected void setExpanded(Item item, boolean expand) {
    165         super.setExpanded(item, expand);
    166         if (expand && item instanceof TreeItem) {
    167             initializeItem((TreeItem) item);
    168         }

    169     }

    170 
    171     /*
    172      * @see CheckboxTreeViewer#getCheckedElements()
    173      
    */

    174     public Object [] getCheckedElements() {
    175         Object [] checked = super.getCheckedElements();
    176         // add all items that are children of a checked node but not created yet
    177 ArrayList  result = new ArrayList ();
    178         for (int i = 0; i < checked.length; i++{
    179             Object  curr = checked[i];
    180             result.add(curr);
    181             Widget item = findItem(curr);
    182             if (item != null{
    183                 Item[] children = getChildren(item);
    184                 // check if contains the dummy node
    185 if (children.length == 1 && children[0].getData() == null{
    186                     // not yet created
    187 collectChildren(curr, result);
    188                 }

    189             }

    190         }

    191         return result.toArray();
    192     }

    193 
    194     private void collectChildren(Object  element, ArrayList  result) {
    195         Object [] filteredChildren = getFilteredChildren(element);
    196         for (int i = 0; i < filteredChildren.length; i++{
    197             Object  curr = filteredChildren[i];
    198             result.add(curr);
    199             collectChildren(curr, result);
    200         }

    201     }

    202 
    203     protected void createChildren(final Widget widget) {
    204         super.createChildren(widget);
    205     }

    206 }


    評(píng)論

    # re: 『SWT』Get all children from TreeView  回復(fù)  更多評(píng)論   

    2009-03-10 16:01 by fy_kenny
    你有沒有發(fā)現(xiàn),當(dāng)打開一個(gè)CheckboxTreeViewer的同時(shí),有對(duì)很多節(jié)點(diǎn)進(jìn)行setChecked時(shí)(比如2000個(gè)節(jié)點(diǎn)),這樣就需要很長時(shí)間才能夠勾選完成.

    這個(gè)問題你遇到過嗎? 怎么去解決呢?

    # re: 『SWT』Get all children from TreeView  回復(fù)  更多評(píng)論   

    2009-03-29 02:35 by javawind
    我是用線程,然后在后臺(tái)處理的。

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲性猛交xx乱| 亚洲sm另类一区二区三区| 亚洲爆乳成av人在线视菜奈实| 一二三区免费视频| 99re视频精品全部免费| 好爽好紧好大的免费视频国产| 亚洲成色www久久网站夜月| www.亚洲成在线| 精选影视免费在线 | 免费做爰猛烈吃奶摸视频在线观看| 亚洲情侣偷拍精品| 亚洲另类春色国产精品| www一区二区www免费| 国产免费久久精品99re丫y| 亚洲一级特黄大片在线观看| 亚洲人成电影青青在线播放| 二个人看的www免费视频| 成人免费a级毛片| 亚洲va久久久噜噜噜久久男同| 亚洲av午夜国产精品无码中文字| 久久青草91免费观看| 国产成人免费A在线视频| 91久久亚洲国产成人精品性色| 日本精品久久久久久久久免费| 青娱乐免费在线视频| 国产AV无码专区亚洲精品| 色婷婷亚洲一区二区三区| 18禁成人网站免费观看| 中文字幕亚洲无线码a| 亚洲AV日韩AV一区二区三曲| **毛片免费观看久久精品| 亚洲毛片αv无线播放一区| 色窝窝亚洲av网| 夭天干天天做天天免费看| 亚洲综合精品一二三区在线| www一区二区www免费| 国产人妖ts在线观看免费视频| 亚洲一级毛片免费在线观看| 最近中文字幕大全免费版在线 | 最近更新免费中文字幕大全| 国产精品免费视频播放器|