2014-12-04 68 views
0

我試圖在用戶雙擊樹上的一列時停止摺疊或展開樹。只有當用戶點擊第一列時才應該允許。 checkboxtree從SWT中的ExpandTree事件中獲取關聯的鼠標點擊

請參閱如果用戶雙擊node2 world1上的複選框,樹會展開或摺疊。我不希望這種情況發生。我的樹需要SWT.FULL_SELECTION來檢測每個列的點擊次數,所以這不是我們要走的路。

我的聽衆看起來像這樣

tree.addTreeListener(new TreeListener() { 
     @Override 
     public void treeExpanded(TreeEvent e) { 
      TreeItem parent = (TreeItem) e.item; 
      Point p = new Point (e.x, e.y); 
      int column = CheckboxClickListener.getColumn(p,parent); 
      if (column > 0) { 
       e.doit = false; 
      } 
     } 

     @Override 
     public void treeCollapsed(TreeEvent e) { 
      TreeItem parent = (TreeItem) e.item; 
      Point p = new Point (e.x, e.y); 
      int column = CheckboxClickListener.getColumn(p,parent); 
      if (column != 0) { 
       e.doit = false; 
      } 
     } 
    }); 

問題是,所產生的點擊鼠標事件是不一樣的,它擴展了樹的TreeEvent。因此,e.x和e.y都是零,這使得我的點檢測毫無用處。由於用戶也可以使用鍵盤擴展樹(因此x和y可能不反映用戶操作),因此在TreeExpand事件中監聽鼠標事件並保持最後一個x和y檢查此處似乎有問題。我還考慮添加一個時間限制來檢查,但似乎是一個不好的方法來處理這個問題。

如何檢測哪個鼠標事件觸發了展開事件?

PS:e.doit = FALSE什麼都不做,連外if條件,所以用停止從展開樹幫助/摺疊,將不勝感激,以及:)

謝謝!

回答

0

我發現有人說這是在這個環節http://www.eclipse.org/forums/index.php/t/257325/

下面的代碼中的錯誤,從擴大有關DoubleClick停止樹,但我不知道爲什麼還是有什麼副作用。

tree.addListener (SWT.MeasureItem, new Listener(){ 
     @Override 
     public void handleEvent(Event event) {} 
    }); 

這會在雙擊ANY列時停止展開。點擊TreeItem左邊的小箭頭仍然會展開樹(因爲它應該)。