最初的目标:
我有一个 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 中。
但这导致了无限循环,并没有解决问题。
问题
有谁知道我们如何实现我们的原始目标?
有谁知道我们如何使我们提出的解决方案发挥作用?