我有一个树形查看器的双击功能,当我双击它们时,树项扩展\折叠。这是完全没问题,但问题是,当我按下键盘上的CTRL + M时,即使然后树项扩展\崩溃,我也不希望这种情况发生。我双击树项的代码如下:
private class DoubleClickListener implements IDoubleClickListener
{
@Override
public void doubleClick(final DoubleClickEvent event)
{
final IStructuredSelection selection = (IStructuredSelection)event.getSelection();
if (selection == null || selection.isEmpty())
return;
final Object sel = selection.getFirstElement();
final ITreeContentProvider provider = (ITreeContentProvider)treeViewer.getContentProvider();
if (!provider.hasChildren(sel))
return;
if (treeViewer.getExpandedState(sel))
treeViewer.collapseToLevel(sel, AbstractTreeViewer.ALL_LEVELS);
else
treeViewer.expandToLevel(sel, 1);
}
}
此行为(CTRL + m扩展树项)仅在我使用IDoubleClickListener接口并覆盖方法doubleClick()时发生,但在使用时不会发生相同的行为(CTRL + m扩展树项) addMouseListener(new MouseListener()) 并覆盖该方法: mouseDoubleClick()。 行为(CTRL + m)是否扩展了与IDoubleClickListener接口相关的树项(如果是这样的原因)或者这个问题是通用的吗?我觉得它不应该与IDoubleClickListener有关,有人可以告诉我为什么使用这两个逻辑有什么不同?
答案 0 :(得分:2)
Ctrl + M通常被视为与Return键相同。 SWT使用的本机树控件通常将Return视为扩展/折叠当前树节点。
要停止此操作,请向树中添加KeyListener
并禁止不需要的密钥事件:
treeViewer.getTree().addKeyListener(new KeyAdapter()
{
@Override
public void keyPressed(final KeyEvent event)
{
if (event.keyCode == SWT.CR ||
(event.keyCode == 'm' && event.stateMask == SWT.CTRL))
{
event.doit = false;
}
}
});
更新
使用:
if (e.keyCode == 'm' && e.stateMask == (SWT.CTRL | SWT.SHIFT))
测试Ctrl + Shift + m
if (e.keyCode == 'm' && e.stateMask == SWT.CTRL)
测试Ctrl + m
if (e.keyCode == SWT.CR)
测试Enter。