2016-04-25 76 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) 

我希望这个答案可以帮助任何人。