禁用JPanel的子级

时间:2010-12-20 14:38:10

标签: java swing jpanel

假设我有这样的层次结构:

JPanel panel1;
   JCheckBox cb1;
   JCheckBox cb2;
   JRadioButton rb1;
   JRadioButton rb2;
     ...

我有条件要在面板中设置要启用/禁用的各个控件组。这很好。 (例如,当一个条件为真时启用cb1和cb2,当它为假时禁用它们。)

我想禁用并重新启用整个面板。如果我拨打panel1.setEnabled(false)这不起作用,它只会禁用该面板,但不会影响其子级。

如果我枚举面板的子节点,并在每个节点上调用setEnabled(false),那就行了,但是当我重新启用面板时,我必须存储子节点状态。

有更简单的方法吗?

4 个答案:

答案 0 :(得分:2)

您可以在面板上放置一个玻璃窗格,让它拦截事件。

http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html

答案 1 :(得分:2)

  

如果我枚举面板的子节点,并在每个子节点上调用setEnabled(false),那就行了,但是当我重新启用面板时,我必须存储子节点启用状态。

Disabled Panel条目提供了此方法的解决方案以及“容器级”玻璃窗格方法。

答案 2 :(得分:1)

JXLayer是实现它的好方法。它可以用于任何Swing组件。

答案 3 :(得分:0)

//una forma de recorrer todos los elementos dentro de un jpanel
Component[] components = jPanelX.getComponents();

for (int i = 0; i < components.length; i++) {

    if(components[i].getClass().getName().toString().equals("javax.swing.JTextField")){
        components[i].setEnabled(false);
    }
}