[英]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.