Причина вызова setEnabled (false) в JPanel - PullRequest
7 голосов
/ 16 марта 2012

Я работаю над Swing некоторое время, но на практике никогда не было ситуации, когда мне приходилось звонить setEnabled(false) в JPanel. Тем не менее, я иногда вижу такой код в некоторых сложных графических интерфейсах. Но я действительно не понимаю, почему кто-то хочет использовать это? Итак, приведите, пожалуйста, несколько примеров из реальных ситуаций, когда вам нужно использовать setEnabled(false) на JPanel.

Также в javadoc написано:

Отключение компонента не отключает его дочерние элементы.

на самом деле у меня была ошибка, потому что таблица внутри отключена JPanel не показывал курсор изменения размера мыши при изменении размера столбцов. Я подозреваю, что здесь есть и другие неприятные сюрпризы.

Ответы [ 2 ]

6 голосов
/ 16 марта 2012

Одной из причин является то, что getEnabled () будет отображать правильное состояние. Рассмотрим случай, когда какой-то обработчик событий хочет пометить панель как больше не включено, и это не разумно во время события перебрать и отключить все дочерние компоненты. Другие части приложению может потребоваться проверить состояние панели с помощью getEnabled (), чтобы определите, что делать в разных точках приложения.

Лично мне никогда не приходилось делать это, но теперь, когда вы спросили меня думая, что я мог бы использовать это когда-нибудь. Благодарю. && + = 1 к вопросу.

5 голосов
/ 16 марта 2012

Стартовый код для включения / отключения всех компонентов в контейнере.

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);
        }
    }
}
...