отключение детей из JPanel - PullRequest
       0

отключение детей из JPanel

4 голосов
/ 20 декабря 2010

Предположим, у меня есть такая иерархия:

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

У меня есть условие, когда я хочу установить / отключить отдельные группы элементов управления на панели. Это отлично работает. (например, включите cb1 и cb2, когда одно условие истинно, отключите их, когда оно ложно.)

Я бы хотел отключить и снова включить всю панель. Если я звоню panel1.setEnabled(false), это не работает, оно только отключает панель, но не влияет на ее дочерние элементы.

Если я перечислю дочерние элементы панели и вызову setEnabled(false) для каждого из них, это будет работать, но тогда мне придется сохранять дочернее состояние включенным при повторном включении панели.

Есть ли более простой способ?

Ответы [ 4 ]

2 голосов
/ 20 декабря 2010

Если я перечислю дочерние элементы панели и вызову setEnabled (false) для каждого из них, это сработает, но тогда мне придется сохранить дочернее включенное состояние при повторном включении панели.

Запись Disabled Panel имеет решение для этого подхода, а также для подхода с использованием стеклянной панели «на уровне контейнера».

2 голосов
/ 20 декабря 2010

Вы можете поместить стеклянную панель поверх панели, чтобы она перехватила события.

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

1 голос
/ 20 декабря 2010

JXLayer - отличный способ добиться этого.Может использоваться для любого компонента Swing.

0 голосов
/ 13 апреля 2013
//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);
    }
}
...