【问题标题】:SWT TabFolder: Weird Drawing BehaviourSWT TabFolder:奇怪的绘图行为
【发布时间】:2011-01-28 01:02:24
【问题描述】:

您好 StackOverflow 专家

说明

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

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

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

问题

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

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

我的控件看起来已禁用并呈灰色显示。

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

视觉上它只是没有更新。

欢迎任何 cmets,任何对代码、示例的请求都将提供并帮助欢迎。

更新

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

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

[main] INFO [dk.viking.controller.LayerController] - 真正的文本{}

[main] INFO [dk.viking.controller.LayerController] - 真正的复合{}

[main] INFO [dk.viking.controller.LayerController] - true TabFolder {}

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

【问题讨论】:

    标签: java swt redraw


    【解决方案1】:

    我找到了问题的根源。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我的问题是我认为我的控件确实是可编辑的。我只是不认为 UI 显示了这个事实。我可以用鼠标标记内容并用 CTRL+C 复制它,但是在执行此操作时,控件始终看起来已禁用并且从不显示内容、鼠标或标记。它只是变灰了。
      • 当您将 Editable 设置为 false 时,此行为是默认行为(复制有效,但您无法编辑文本)。检查谁打电话给setEditable()
      • 我只有 1 次调用 setEditable(true);在我的代码中。但这不是内容不可编辑的问题。内容不可见。我只在文本框内看到灰色背景。没有文字。无论我在代码中做什么,灰色的外观都会保持不变。
      • 啊。检查getBackground ()getForeground () 的结果。也许有人将两者都设置为相同的颜色。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多