2010-03-16 41 views
1

你好StackOverflow的專家SWT TabFolder中:古怪的繪圖行爲

說明

我有一個SWT頁面擁有多項具有動態創建的TabItems的TabFolder中。

在每個TabItem中,我創建一個Composite,並將TabItem.setControl()設置爲Composite。 然後我使用這個複合材料作爲我繪製我的物品的頁面。 我畫了一組控件,包括文本框和標籤。

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

問題

上的標籤,是不是第一個選項卡我有以下問題:

  • 我無法改變視覺然後 編輯/我控制的啓用狀態。
  • 我無法直觀地設置我的元素的文本內容

我的控件照看殘疾並出現一個灰色的外觀。

但我可以用鼠標選擇內容並使用CTRL + C將其複製出來。所以文字比賽在那裏,它們是可編輯的。

在視覺上它只是沒有更新。

任何評論都是有效的,任何代碼請求,例子都會提供並且幫助歡迎。

更新

我嘗試添加了建議調試循環的代碼,在那裏我試圖讓我的控制。這是結果:

[主] INFO [dk.viking.controller.LayerController] - 現在f038.stklok爲可編輯的[真],並啓用[真]

[主] INFO [DK。 viking.controller.LayerController] - 真文本{}

[主要] INFO [dk.viking.controller.LayerController] - 真複合材料{}

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

[main] INFO [dk.viking.controller.LayerController] - 真殼{Viking GUI}

回答

0

我發現問題的根源。

用於填充TabItem的Composite with Controls的代碼被調用兩次。

所以所有的控件都是重複的,我們的控制器只有一半實際使用的控件有活動引用。

我無法準確地解釋我們看到的繪圖行爲,但是刪除其中一個電話會導致問題消失。

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

1

我的猜測是TabItem本身被禁用。我建議在一些地方你的代碼這需要一個文本控件並打印它的啓用狀態,然後與父複合繼續,確實增加了一個循環一樣:

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

這應該給你一個想法,如果這是你的問題的原因。如果不是,則在Text.setEditable()中設置一個斷點並檢查是誰調用的。

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

+0

我的問題是,我認爲我的控件確實是可編輯的。 我只是不認爲用戶界面顯示這個事實。 我可以用鼠標標記內容並用CTRL + C複製它,但是在執行此操作時,控件始終會被禁用,並且不會顯示內容,鼠標或標記。 它簡單,灰色。 – JesperGJensen

+0

當您將「可編輯」設置爲false(複製工作,但無法編輯文本)時,此行爲是默認設置。檢查誰調用了'setEditable()'。 –

+0

我只有1次調用setEditable(true);在我的代碼中。 但這不是內容不可編輯的問題。 內容不可見。我只看到TextBox內部的灰色背景。沒有文字。無論我在代碼中做什麼,灰色的外觀都會保持不變。 – JesperGJensen