Hello StackOverflow专家
描述
我有一个带有TabFolder的SWT页面,其中包含许多动态创建的TabItems。
在每个TabItem上创建一个Composite并将TabItem.setControl()设置为Composite。 然后我使用这个Composite作为我绘制项目的页面。 我绘制了一组控件,包括文本框和标签。
对于First,Default选项卡,这很好用。没问题。
问题
在不是第一个标签的标签上,我遇到以下问题:
我的控件看起来已禁用,并且看起来很灰。
但是我可以用鼠标选择内容并使用CTRL + C将其复制出来。所以文本背景就在那里,它们是可编辑的。
视觉上它没有更新。
任何评论都是指定的,任何代码请求,示例都将提供并帮助Welcommed。
更新
我尝试在代码中添加了建议调试循环,我尝试启用我的控件。这就是结果:
[main] INFO [dk.viking.controller.LayerController] - f038.stklok现在可以编辑[true]并启用[true]
[main] INFO [dk.viking.controller.LayerController] - true Text {}
[main] INFO [dk.viking.controller.LayerController] - true Composite {}
[main] INFO [dk.viking.controller.LayerController] - true TabFolder {}
[main] INFO [dk.viking.controller.LayerController] - true Shell {Viking GUI}
答案 0 :(得分:1)
我的猜测是禁用TabItem本身。我建议在代码的某个地方添加一个循环,它接受一个文本控件并打印它的启用状态,然后继续使用父复合并执行相同的操作:
Control c = text;
while (c != null) {
System.out.println(c.getEnabled()+" "+c);
c = c.getParent();
}
这可以让您知道这是否是您的问题的原因。如果没有,则在Text.setEditable()
中设置断点并检查谁调用它。
[编辑]如果文字可编辑但不可见(即灰色为灰色),请检查getBackground ()
和getForeground ()
返回的内容。也许有人将两者都设置为相同的颜色。
答案 1 :(得分:0)
我找到了问题的根源。
用于填充TabItem的Composite with Controls的代码被调用了两次。
因此所有控件都是重复的,我们的控制器只有一半实际使用的控件有活动参考。
我无法准确解释我们看到的绘图行为,但是删除其中一个调用会导致问题消失。
我希望有一天我的问题可以帮助别人。