禁用AND灰显SWT复合

Fre*_*rik 13 swt

我有一个Composite我希望能够以编程方式启用/禁用.该Control.setEnabled(boolean enabled)方法工作正常,但它不提供窗口小部件被禁用的任何可视信息.

我想要做的是让残疾状态意味着小部件是灰色的.现在,他们只是进入一个奇怪的状态,用户无法点击或执行任何操作.

Fre*_*rik 12

问题确实是我禁用了复合而不是其中的控件.我最终做的是这样的:

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);
   }
}
Run Code Online (Sandbox Code Playgroud)


and*_*nka 11

Composite是一个容器控件,它使用布局来保存其他控件 - 您无法真正看到复合,只能看到它所拥有的控件.要禁用并在视觉上看到然后禁用,您必须呼叫setEnabled(false)所有孩子,假设他们也不是容器.基本上,要启用/禁用叶子小部件,您将看到视觉指示.

在禁用Composite时,您无法对窗口小部件执行任何操作的原因是Composite正在吃掉所有事件.虽然子窗口小部件没有转发事件,但是他们对父母的状态一无所知,所以他们不会变灰.