簡體   English   中英

SWT TabFolder:奇怪的繪圖行為

[英]SWT TabFolder: Weird Drawing Behaviour

您好StackOverflow專家

描述

我有一個帶有TabFolder的SWT頁面,其中有許多動態創建的TabItem。

在每個TabItem上,我創建一個Composite並將TabItem.setControl()設置為Composite。 然后,我將此復合材料用作繪制項目的頁面。 我繪制了一組控件,包括文本框和標簽。

對於“第一個,默認”選項卡,這可以正常工作。 沒問題。

問題

在不是第一個選項卡的選項卡上,我遇到以下問題:

  • 我無法直觀地更改控件的“已編輯/啟用”狀態。
  • 我無法直觀地設置元素的文本內容

我的控件看上去已禁用,外觀為灰色。

但是我可以用鼠標選擇內容,然后使用CTRL + C將其復制出來。 因此文本內容已存在,並且它們是可編輯的。

在視覺上,它只是未更新。

感謝您的任何評論,我們將提供任何代碼請求,示例並為您提供幫助。

更新

我嘗試將建議的調試循環添加到代碼中,嘗試在其中啟用我的控件。 結果是:

[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()設置一個斷點,並檢查誰調用它。

[編輯]如果文本是可編輯的但不可見(即灰色為灰色),請檢查getBackground ()getForeground ()返回什么。 也許有人將兩者設置為相同的顏色。

我找到了問題的根源。

用來填充TabItem的Composites和Controls的代碼被調用了兩次。

因此,所有控件都是重復的,並且我們的控制器僅有效引用了實際使用的控件的一半。

我無法准確解釋我們看到的“繪圖”行為,但是刪除這些調用之一導致問題消失了。

我希望我的問題有一天能幫助別人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM