在JPanel中调用setEnabled(false)的原因

时间:2012-03-16 01:13:02

标签: java swing jpanel

我现在正在研究Swing一段时间,但是当我不得不在setEnabled(false)中拨打JPanel时,我从未遇到过这种情况。 不过,我有时会在一些复杂的gui中看到这样的代码。但是我真的不为人们想要使用它而不为人所知? 所以,当你需要在setEnabled(false)上使用JPanel时,请给我一些现实常见情况的例子。

同样在javadoc中它说:

  

禁用组件不会禁用其子组件。

实际上我有一个错误,因为禁用JPanel内的表在调整列大小时没有显示鼠标调整大小的游标。我怀疑这里还有其他令人不快的意外。

2 个答案:

答案 0 :(得分:6)

一个原因是getEnabled()将反映正确的状态。 考虑一些事件处理程序想要标记面板的情况 因为不再启用​​,在活动时不谨慎 迭代并禁用所有子组件。其他部分 app可能需要通过getEnabled()来测试面板的状态 确定应用程序中不同点的操作。

我个人从来没有这样做,但现在你问我并得到了我 以为我可能会在某个时候使用它。谢谢。 && + = 1问题。

答案 1 :(得分:5)

启动/禁用容器中所有组件的入门代码。

JPanel p = new JPanel();
p.setEnabled(state);
setEnabledAll(p, state);

public void setEnabledAll(Object object, boolean state) {
    if (object instanceof Container) {
        Container c = (Container)object;
        Component[] components = c.getComponents();
        for (Component component : components) {
            setEnabledAll(component, state);
            component.setEnabled(state);
        }
    }
    else {
        if (object instanceof Component) {
            Component component = (Component)object;
            component.setEnabled(state);
        }
    }
}