gpt4 book ai didi

java - 设置 SWT.FULL SELECTION 时,SWT TreeViewer 同时展开和折叠

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:31 25 4
gpt4 key购买 nike

我已经实现了一个 TreeViewer,如下所示,并向其添加了一个双击监听器。此双击监听器应该展开/折叠节点。

treeViewer = new TreeViewer(component, SWT.BORDER | SWT.MULTI );
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent e) {
final IStructuredSelection selection = (IStructuredSelection) e
.getSelection();
if (selection == null || selection.isEmpty())
return;

final Object sel = selection.getFirstElement();
TreeNode selNode = (TreeNode) sel;

if (treeViewer.getExpandedState(sel)) {
treeViewer.collapseToLevel(sel, 1);
} else {
treeViewer.expandToLevel(sel, 1);
}
}
});

现在,如果我将 TreeViewer 更改为 FULL_SELECTION,例如...

treeViewer = new TreeViewer(component, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);

这种行为变得很奇怪。

当双击显示标签的节点时,一切都会像以前一样工作。但是,当单击距离标签稍远的行时,节点同时展开/折叠,根本没有任何变化。

调试它时我发现,在我收到双击事件之前,会触发另一个事件(或者在我处理它之前正在监听它),从而展开/折叠特定节点。禁用监听器我就能够摆脱这种行为。但是,当双击标签时,这再次禁用了节点的扩展。

我在调试时在 Eclipse 中看到了类似的行为,想知道这是否是一个已知的错误,或者甚至是更糟糕的预期行为?

如有任何建议,我们将不胜感激,并提前致谢!

最佳答案

我可以在 Windows 7 上观察到您所描述的问题。展开/折叠项目的东西很可能是 native 代码。

虽然我认为这是 SWT 或 Win32 树控件中的一个错误,should be reported并在 SWT 中修复或解决,我发现了一个乍一看可行的解决方法。如果您在 Tree 小部件上使用 SWT 监听器而不是 IDoubleClikListener,您可以确定是否单击了标签本身或只是单击了,然后自行展开/折叠该项目或将其留给该某物

treeViewer.getTree().addListener( SWT.DefaultSelection, new Listener() {
@Override
public void handleEvent( Event event ) {
TreeItem treeItem = ( TreeItem )event.item;
Point cursorLocation = event.display.getCursorLocation();
Point localCursorLocation = treeItem.getParent().toControl( cursorLocation );
if( treeItem.getBounds().contains( localCursorLocation ) ) {
// put your JFace expand/collapse code here
}
}
} );

由于此问题可能与平台相关,因此您应该在所有目标平台上进行测试。

关于java - 设置 SWT.FULL SELECTION 时,SWT TreeViewer 同时展开和折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com