Отключите И отобразьте составной объект SWT серым

У меня есть a Composite то, что я хочу смочь позволить/запретить программно. Control.setEnabled(boolean enabled) метод хорошо работает, но он не дает визуальной информации, что виджет (виджеты) отключен.

То, что я хотел бы сделать, должно иметь нерабочее состояние, среднее, что виджеты отображаются серым. Прямо сейчас они просто вводят странное состояние, где пользователь не может нажать или выполнить любое действие с ними.

13
задан Lii 16 November 2016 в 13:21
поделиться

3 ответа

Составной элемент - это контейнерный элемент управления, который содержит другие элементы управления с использованием макета - на самом деле вы не можете увидеть составной элемент, вы можете увидеть только элементы управления, которые он удерживает. Чтобы отключить и визуально увидеть, что затем отключено, вам придется вызвать setEnabled (false) для всех дочерних элементов, предполагая, что они тоже не являются контейнерами. По сути, нужно включить / отключить листовые виджеты, и вы увидите визуальную индикацию.

Причина, по которой вы не можете ничего сделать с виджетами при отключении Composite, заключается в том, что Composite поглощает все события. Хотя дочерние виджеты не получают пересылки событий, они ничего не знают о состоянии своих родительских виджетов, поэтому они не отображаются серым цветом.

11
ответ дан 1 December 2019 в 21:51
поделиться

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

public void recursiveSetEnabled(Control ctrl, boolean enabled) {
   if (ctrl instanceof Composite) {
      Composite comp = (Composite) ctrl;
      for (Control c : comp.getChildren())
         recursiveSetEnabled(c, enabled);
   } else {
      ctrl.setEnabled(enabled);
   }
}
12
ответ дан 1 December 2019 в 21:51
поделиться

Другими словами, вам нужно написать код вроде этого, учитывая Composite c:

for (Control child : c.getChildren())
  child.setEnabled(false);
0
ответ дан 1 December 2019 в 21:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: