2011-03-08 97 views
1


我需要在Java SWT中爲樹創建一個彈出菜單。但是菜單應該只在沒有選擇項目時彈出(當我點擊TreeViewer的空白區域時)。如果我現在選擇樹的一個項目,我不能再取消它的選擇。 TreeViewer在Composite中。
我的第一個想法是添加一個MouseListener來檢查是否沒有選擇這些項目,並調用deselectAll(),但event.getSource()只返回樹。
任何想法如何刪除一個項目選擇時,空格被點擊(右鍵)?Java SWT:刪除樹項目的選擇

回答

5

通常情況下,您可以通過Ctlr單擊該項目取消選擇。

另一種選擇是註冊鼠標單擊的偵聽器,並使用事件位置來定位樹項目。如果返回null,則可以撥打deselectAll()

但是,如何從Tree獲得TreeViewer?簡單:將引用存儲在樹的data屬性中。然後你就可以在你的事件處理程序使用此代碼:

TreeViewer view = (TreeViewer) event.getSource().getData(); 
+0

謝謝你的快速回復!但是我不能添加一個有用的偵聽器到TreeViewer來檢查哪個項目被點擊。你的想法是什麼? – 2011-03-08 10:40:45

+0

您需要將偵聽器添加到'Tree'。一個'TreeViewer'只是一個輔助類,它使得在樹中顯示樹模型變得更加簡單;大部分工作仍在底層樹部件上完成。 – 2011-03-08 11:04:37

+0

也許我不清楚。 MouseListener已經在樹上。我需要找出是否點擊了一個項目或空白區域(右鍵點擊首選)。如果我嘗試使用'((Tree)event.getSource())。getLocation()'獲取位置,則無論點擊哪處,它都會返回相同的Point。 – 2011-03-08 12:04:40

2

event.getSource()的getLocation()只是告訴你父的樹部件的當前位置的座標系,這就是爲什麼它總是相同的。您需要從MouseEvent獲取點擊座標。它有x和y,這應該是點擊座標。

綜上所述:

Tree tree = (Tree) event.getSource(); 
if (tree.getItem(new Point(event.x, event.y)) != null) 
    // an item was clicked. 
else 
    // no item was clicked.