Java SWT选项卡文件夹:奇怪的绘图行为

Java SWT选项卡文件夹:奇怪的绘图行为,java,swt,redraw,Java,Swt,Redraw,各位专家好 说明 我有一个SWT页面,其中有一个TabFolder,其中包含许多动态创建的TabItems 在每个TabItem上,我装入一个复合材料,并将TabItem.setControl()设置为复合材料。 然后,我使用这个组合作为我绘制项目的页面。 我画了一组控件,包括文本框和标签 对于第一个默认选项卡,这可以正常工作。没问题 问题 在不是第一个选项卡的选项卡上,我有以下问题: 我无法在视觉上改变 我的控件的已编辑/已启用状态 我无法直观地设置文本 我的元素的内容 我的控件看起来已禁

各位专家好

说明

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

在每个TabItem上,我装入一个复合材料,并将TabItem.setControl()设置为复合材料。 然后,我使用这个组合作为我绘制项目的页面。 我画了一组控件,包括文本框和标签

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

问题

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

  • 我无法在视觉上改变 我的控件的已编辑/已启用状态
  • 我无法直观地设置文本 我的元素的内容
我的控件看起来已禁用,并且外观为灰色

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

从视觉上看,它只是没有更新

任何评论都将附呈,任何代码请求、示例都将提供,并欢迎帮助

更新

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

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

[main]信息[dk.viking.controller.LayerController]-真文本{}

[main]信息[dk.viking.controller.LayerController]-真复合{}

[main]信息[dk.viking.controller.LayerController]-真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()
中设置一个断点,并检查谁调用它


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

我找到了问题的根源

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

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

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


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

我的问题是我认为我的控件确实是可编辑的。我只是不认为UI显示了这个事实。我可以用鼠标标记内容并用CTRL+C复制它,但在执行此操作时,控件总是看起来被禁用,并且从不显示内容、鼠标或标记。当您将“可编辑”设置为false(复制可以工作,但无法编辑文本)时,此行为是默认行为。检查谁调用了setEditable()。我只调用了一次setEditable(true);在我的代码中。但这不是内容不可编辑的问题。内容不可见。我只在文本框内看到灰色背景。没有文本。无论我在代码中做什么,灰显的外观都会保持不变。检查
getBackground()
getForeground()
的结果。也许有人把这两种颜色都调成了同一种颜色。