我試圖在用戶雙擊樹上的一列時停止摺疊或展開樹。只有當用戶點擊第一列時才應該允許。 從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條件,所以用停止從展開樹幫助/摺疊,將不勝感激,以及:)
謝謝!