Первоначальная цель:
У меня есть TreeMenu, который я использую для отображения моего меню.
В этом дереве пользователь может выбирать различные элементы.
Я хотел бы отключить дерево, чтобы пользователь не мог выбрать новый элемент после выбора первого.
Уловка в том, что мы не можем использовать setEnabled, потому что нам не разрешено использовать серый цвет. Внешний вид / цвета не могут измениться.
Предлагаемое нами решение
Нашей первой идеей было использование Composite с SWT.NO_BACKGROUND в верхней части меню, чтобы предотвратить любое взаимодействие пользователя с TreeMenu.
Код:
final Composite cover = new Composite(getPage().shell, SWT.NO_BACKGROUND);
cover.setLocation(getMenu().getLocation());
cover.setSize(getMenu().getSize());
cover.moveAbove(getMenu());
Это проблема с перерисовкой.
Если экран закрывается другим экраном, а затем возвращается на передний план, Композитное покрытие заполняется фрагментами предыдущего перекрывающегося окна.
Наша идея состояла в том, чтобы вручную перерисовать меню:
cover.moveBelow(getMenu());
getMenu().update();
cover.moveAbove(getMenu());
Мы поместили код внутри paintEventListener.
Но это вызвало бесконечный цикл и не решило проблему.
Вопросы
Кто-нибудь знает, как мы можем достичь нашей первоначальной цели?
Кто-нибудь знает, как мы можем заставить наше предлагаемое решение работать?