禁用包含自身内部组件的整个JPanel

时间:2009-09-19 06:56:08

标签: java

目前,使用单个方法调用禁用包含其所有组件的JPanel,我必须覆盖其禁用方法,如下所示:

@Override
public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    Component[] components = getComponents();
    if (components != null && components.length > 0) {
    int count = components.length;
    for (int i = 0; i < count; i++)
        components[i].setEnabled(enabled);
    }
}

有没有标准方法可以这样做?而是提供我自己的实现?

1 个答案:

答案 0 :(得分:1)

首先,您可以轻松简化该代码:

@Override
public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    for (Component component : getComponents())
        component.setEnabled(enabled);
    }
}

这当然会破坏组件的任何个别启用状态。

通常禁用的组件看起来很糟糕,顶部的玻璃窗格可以停止指针输入,也许还可以添加更微妙的视觉效果。

您可以采用模型方法。创建每个组件时,它会将启用状态委派给模型。然后,您只需要一次状态更改即可更新所有组件。这使您可以拥有任意组并促进更复杂的逻辑。