0

你好 StackOverflow 专家

描述

我有一个带有 TabFolder 的 SWT 页面,其中包含许多动态创建的 TabItem。

在每个 TabItem 上,我创建一个 Composite 并将 TabItem.setControl() 设置为 Composite。然后我使用这个 Composite 作为我在其上绘制我的项目的页面。我绘制了一组控件,包括文本框和标签。

对于第一个默认选项卡,这可以正常工作。没问题。

问题

在不是第一个选项卡的选项卡上,我遇到以下问题:

  • 我无法在视觉上更改控件的编辑/启用状态。
  • 我无法直观地设置元素的文本内容

我的控件看起来被禁用并且看起来是灰色的。

但我可以用鼠标选择内容并使用 CTRL+C 将其复制出来。所以文本内容就在那里,它们是可编辑的。

视觉上它只是没有更新。

任何评论都可以接受,任何对代码、示例的请求都将被提供并欢迎帮助。

更新

我尝试将建议调试循环添加到代码中,并尝试启用我的控件。结果是这样的:

[main] INFO [dk.viking.controller.LayerController] - f038.stklok 现在可编辑 [true] 并启用 [true]

[主] 信息 [dk.viking.controller.LayerController] - 真正的文本 {}

[主] 信息 [dk.viking.controller.LayerController] - 真正的复合 {}

[主] 信息 [dk.viking.controller.LayerController] - 真正的 TabFolder {}

[main] INFO [dk.viking.controller.LayerController] - 真正的 Shell {Viking GUI}

4

2 回答 2

1

我的猜测是 TabItem 本身已被禁用。我建议在代码的某个位置添加一个循环,该循环采用文本控件并打印它的启用状态,然后继续使用父复合并执行相同操作:

 Control c = text;
 while (c != null) {
      System.out.println(c.getEnabled()+" "+c);
      c = c.getParent();
 }

这应该让您了解这是否是您的问题的原因。如果没有,则设置一个断点Text.setEditable()并检查谁调用它。

[编辑] 如果文本可编辑但不可见(即灰色上的灰色),检查内容getBackground ()getForeground ()返回。也许有人将两者都设置为相同的颜色。

于 2010-03-16T10:08:17.830 回答
0

我找到了问题的根源。

用于使用控件填充 TabItem 的 Composite 的代码被调用了两次。

所以所有的控件都被复制了,我们的控制器只有对一半实际使用的控件的活动引用。

我无法准确解释我们看到的绘图行为,但是删除其中一个调用会导致问题消失。

我希望我的问题有朝一日可以帮助别人。

于 2010-03-18T14:22:54.630 回答