SWT TabFolder: странное поведение при рисовании - PullRequest
0 голосов
/ 16 марта 2010

Hello StackOverflow Experts

Описание

У меня есть SWT-страница с TabFolder с несколькими динамически создаваемыми TabItems.

На каждом элементе TabItem я создаю Composite и устанавливаю для TabItem.setControl () значение Composite. Затем я использую этот Композит как страницу, на которой я рисую свои предметы. Я рисую набор элементов управления, включая текстовые поля и метки.

Для первой вкладки по умолчанию это работает нормально. Нет проблем.

Задача

На вкладках, которые не являются первыми, у меня возникают следующие проблемы:

  • Я не могу визуально изменить тогда Состояние редактирования / включения моих элементов управления.
  • Я не могу визуально установить текст содержание моих элементов

Мои элементы управления выглядят отключенными и имеют серый цвет.

Но я могу выбрать контент с помощью мыши и использовать CTRL + C, чтобы скопировать его. Итак, текстовое контекст есть, и они доступны для редактирования.

Визуально он просто не обновляется.

Любые комментарии указаны, Любые запросы кода, примеры будут предоставлены и помогут Welcommed.

Обновление

Я попытался добавить цикл отладки подсказок в код, где я пытаюсь включить свои элементы управления. Это был результат:

[main] INFO [dk.viking.controller.LayerController] - f038.stklok теперь доступен для редактирования [true] и включен [true]

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

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

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

[main] INFO [dk.viking.controller.LayerController] - true Shell {Viking GUI}

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Я предполагаю, что сам TabItem отключен. Я предлагаю добавить в какое-то место вашего кода цикл, который принимает текстовый элемент управления и печатает его состояние включения, а затем продолжает работу с родительским композитом и делает то же самое:

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

Это должно дать вам представление о том, является ли это причиной вашей проблемы. Если нет, то установите точку останова в Text.setEditable() и проверьте, кто ее вызывает.

[РЕДАКТИРОВАТЬ] Если текст редактируемый, но не видимый (т.е. серый на сером), проверьте, что возвращают getBackground () и getForeground (). Может быть, кто-то установил оба цвета.

0 голосов
/ 18 марта 2010

Я нашел источник проблемы.

Код, который использовался для заполнения Composite объекта TabItem элементами управления, вызывался дважды.

Таким образом, все элементы управления были продублированы, и наш контроллер имел активные ссылки только на половину фактически используемых элементов управления.

Я не могу точно объяснить поведение рисования, которое мы видели, однако удаление одного из этих вызовов привело к исчезновению проблемы.

Я надеюсь, что мои проблемы могут однажды помочь кому-то другому.

...