您好StackOverflow专家
描述
我有一个带有TabFolder的SWT页面,其中包含许多动态创建的TabItem。
在每个TabItem上,我创建一个Composite并将TabItem.setControl()设置为Composite。
然后,我将此复合材料用作绘制项目的页面。
我绘制了一组控件,包括文本框和标签。
对于“第一个,默认”选项卡,这可以正常工作。没问题。
问题
在不是第一个选项卡的选项卡上,我遇到以下问题:

我当时无法从视觉上改变
我的控件的已编辑/启用状态。
我无法在视觉上设置文本
我元素的内容

我的控件看上去已禁用,外观为灰色。
但是我可以用鼠标选择内容,然后使用CTRL + C将其复制出来。因此文本内容已存在,并且它们是可编辑的。
在视觉上,它只是未更新。
感谢您提出任何意见,提供任何代码请求,示例,并为Welcommed提供帮助。
更新
我尝试将建议的调试循环添加到代码中,尝试在其中启用控件。结果是:

[main]信息[dk.viking.controller.LayerController]-f038.stklok现在可编辑[true]并已启用[true]
[main]信息[dk.viking.controller.LayerController]-true文本{}
[main]信息[dk.viking.controller.LayerController]-真正的复合{
[main]信息[dk.viking.controller.LayerController]-true TabFolder {}
[main]信息[dk.viking.controller.LayerController]-真正的Shell {Viking GUI}

最佳答案

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

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


如果这是造成您的问题的原因,则应该给您一个提示。如果不是,则在Text.setEditable()中设置一个断点并检查谁调用它。

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

10-08 09:22