假设我有这样的层次结构:
JPanel panel1;
JCheckBox cb1;
JCheckBox cb2;
JRadioButton rb1;
JRadioButton rb2;
...
我有条件要在面板中设置要启用/禁用的各个控件组。这很好。 (例如,当一个条件为真时启用cb1和cb2,当它为假时禁用它们。)
我想禁用并重新启用整个面板。如果我拨打panel1.setEnabled(false)
这不起作用,它只会禁用该面板,但不会影响其子级。
如果我枚举面板的子节点,并在每个节点上调用setEnabled(false)
,那就行了,但是当我重新启用面板时,我必须存储子节点状态。
有更简单的方法吗?
答案 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);
}
}