【问题标题】:Java SWT get bounds of custom element in TreeViewJava SWT 获取 TreeView 中自定义元素的边界
【发布时间】:2016-04-25 16:29:20
【问题描述】:
我创建了一个 TreeView 与 ContentProvider 和自定义树元素。
我还在TreeView 中添加了ISelectionChangedListener。
我想添加一个MouseListener,检测树的元素是否被右键单击并显示一个弹出菜单。
如果单击树周围的白色区域,我不想显示弹出菜单。
菜单通过 plugin.xml 中的Extensions 添加。
我现在如何评估 tree 元素是否被右键单击,以便显示弹出菜单(可能在 plugin.xml 中使用 visibleWhen)?
我也想清除选择,如果在TreeView的白色区域检测到右键。
【问题讨论】:
标签:
java
tree
swt
selection
treeviewer
【解决方案1】:
好吧,我没有意识到我仍然可以使用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)
我希望这个答案对任何人都有帮助。