SWT TabFolder:奇怪的绘图行为

时间:2010-03-16 10:00:08

标签: java swt redraw

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}

2 个答案:

答案 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的代码被调用了两次。

因此所有控件都是重复的,我们的控制器只有一半实际使用的控件有活动参考。

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

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