gpt4 book ai didi

swt - 使用 SWT.NO_BACKGROUND 重绘复合背后的控制

转载 作者:行者123 更新时间:2023-12-04 06:58:47 26 4
gpt4 key购买 nike

原目标:

我有一个 TreeMenu 用于显示我的菜单。
在这棵树中,用户可以选择不同的项目。

我想禁用树,以便用户在选择第一个项目后无法选择新项目。
问题是,我们不能使用 setEnabled,因为我们不允许使用灰色外观。外观/颜色可能不会改变。

我们提出的解决方案

我们的第一个想法是在菜单顶部使用带有 SWT.NO_BACKGROUND 的 Composite,以防止任何用户与 TreeMenu 交互。

代码:

final Composite cover = new Composite(getPage().shell, SWT.NO_BACKGROUND);
cover.setLocation(getMenu().getLocation());
cover.setSize(getMenu().getSize());
cover.moveAbove(getMenu());

这有重绘的问题。

如果屏幕被另一个屏幕覆盖,然后又回到前面,则 Cover Composite 将填充上一个重叠窗口的片段。

我们的想法是手动重绘菜单:
cover.moveBelow(getMenu());
getMenu().update();
cover.moveAbove(getMenu());

我们将代码放在paintEventListener 中。

但这造成了无限循环,并没有解决问题。

问题

有没有人知道我们如何实现最初的目标?

有谁知道我们如何使我们提出的解决方案起作用?

最佳答案

SWT-Snippet80 .它显示了如何防止选择。您的问题的解决方案是将这样的监听器添加到您的树中:

  tree.addListener(SWT.Selection, new Listener() {

TreeItem[] oldSelection = null;


public void handleEvent( Event e ) {
Tree tree = (Tree)(e.widget);
TreeItem[] selection = tree.getSelection();
if ( oldSelection != null )
tree.setSelection(oldSelection);
else
oldSelection = selection;
}
});

我不建议尝试实现您的解决方法。我相信在 SWT 中不支持将透明控件放在彼此之上 - 我想我读过一次 Steve Northover 关于这个主题的评论。即使你让它在某些操作系统上工作,它也可能无法在另一个操作系统上工作——这太过分了。

SWT 支持的一种解决方案是在彼此之上设置透明窗口。但这也很难实现(调整大小、移动、始终在顶部、重绘工件),并且可能与其他解决方法一样大。去找听者。

关于swt - 使用 SWT.NO_BACKGROUND 重绘复合背后的控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207428/

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