2016-04-25 57 views
0

我創建了一個TreeView,其中包含ContentProvider和自定義樹元素。 我還有一個ISelectionChangedListener添加到TreeViewJava SWT獲取TreeView中自定義元素的邊界

我想添加一個MouseListener,檢測樹的某個元素是否被右鍵單擊並顯示一個彈出菜單。 如果單擊樹周圍的白色區域,我不想顯示彈出式菜單。 菜單通過Extensions添加到plugin.xml中。

現在我該如何評估一個tree元素是否被右鍵單擊,這樣我就可以顯示彈出菜單(可能在plugin.xml中顯示visibleWhen)? 如果在TreeView的白色區域中檢測到右鍵單擊,我也想清除選擇。

回答

0

好吧,我沒有意識到,我仍然可以使用tree.getItem(...)。 因此,這裏是我的全部MouseListener

treeOPCUA.addMouseListener(new MouseListener() 
{ 
    @Override 
    public void mouseUp(MouseEvent e) 
    { 
     if(e.button == 3 && rightMouseClicked == true) 
      rightMouseClicked = false; 
    } 

    @Override 
    public void mouseDown(MouseEvent e) 
    { 
     if(e.button == 3 && rightMouseClicked == false) 
      rightMouseClicked = true; 
     if(treeOPCUA.getItem(new Point(e.x, e.y)) == null) 
      viewer.setSelection(null); 
    } 

    @Override 
    public void mouseDoubleClick(MouseEvent e) 
    { 
     viewer.setExpandedState(e.getSource(), true); 
    } 
}); 

隨着boolean變量「rightMouseClicked」我聽出我的ISelectionChangedListener如果單擊鼠標右鍵:

if(event.getSelection() instanceof IStructuredSelection && !rightMouseClicked) 

我希望這個答案可以幫助任何人。