Согласно @Data description вы можете использовать:
Все созданные геттеры и сеттеры будут общедоступными. Чтобы переопределить уровень доступа, аннотируйте поле или класс с явной аннотацией @Setter и / или @Getter. Вы также можете использовать эту аннотацию (объединив ее с AccessLevel.NONE), чтобы подавить генератор и / или сеттер вообще.
blockquote>
Для добавления к ответ mmyers отключение детей не является легкой задачей (см. этот поток )
проблема близко к неразрешимому в общем случае. Вот почему это не часть базового Swing.
Технически, disable-and-store-old-state, сопровождаемый enable-and-restore-to-old-state, мог бы выглядеть привлекательным. Это даже могло бы быть хорошее, чтобы в особых случаях. Но существуют (по крайней мере, вероятно, набор больше) две проблемы с этим.
Составные компоненты
рекурсия должна остановиться на "составном компоненте" (или "единственный объект"). Тогда компонент ответственен за хранение состояния зависимого. Нет никакого общего способа обнаружить такой компонент - примерами является JComboBox, JXDatePicker (который, как связано выпуск )
Для создания вещей еще более сложными, зависимые не должны находиться под иерархией "составного компонента", f.i. JXTable заботится о ColumnControl (и заголовок) включил состояние.
Попытка заняться обоими потребовала бы для имения
a) свойство на составном объекте: "не касайтесь моих детей" и
b) свойство на неограниченных зависимых: "не касайтесь меня"Привязка к включенному
, enable-and-update-to-old мог бы повредить состояние приложения, если включенное состояние связывается с (представление или другой) свойство модели и то свойство, измененное тем временем - теперь, старое состояние недопустимо.
Попытка заняться, который потребовал бы для имения
c), "реальное" stored-old-enabled-due-to-view-concerns свойство
d) связывает свойство модели представления и с включенным и с stored-old-enabledJXRadioGroup, имеет вариант той проблемы: При отключении - самой группе или общем контроллере - отслеживает старо-поддерживающую из каждой кнопки. Кнопка включила, управляется Действием - если существует Действие. Таким образом, включенный контроллер должен восстановить к старо-поддерживающему, или к действию включил. Во время группы отключил (поскольку-группа), проблема вырисовывается, если Действие включило, была ложь при хранении и измененный на истинный. Другой, если действия добавляются.
Теперь воображают сложность изменений состояния при перегрузке a) - d)
JXLayer мог бы быть тем, что Вы ищете, согласно это сообщение :
Обертка Ваш контейнер с JXLayer и вызовом
JXLayer.setLocked(true)
после этого - все компоненты внутри будут отключены
Это то, что я придумал.
Component[] comps = myPanel.getComponents();
for (Component comp:comps){
comp.setEnabled(false);
}
Как ответил VonC, простого решения не существует. Поэтому я рекомендую вам с самого начала программировать с помощью вспомогательной инфраструктуры.
Простая инфраструктура, вероятно, будет, например, с использованием делегированных слушателей, которые выполняют проверку «событие включено» из флага суперконтейнера перед фактическим ответом на событие:
class ControlledActionListener extends ActionListener {
...
public void actionPerformed( ActionEvent e ) {
if( !container.isEnabled() ) return;
doYourBusinessHere();
}
}
Или даже лучше, вы можете использовать APT для автоматического введите шаблонный код за вас.
Это всегда хорошо работает. Это чистый способ блокировать как взаимодействие с пользователем, так и программные вызовы одним усилием. Несмотря на то, что для поддержки базовой функциональности вам потребуется несколько кодов, взамен вы получите простоту, удобство использования и стабильность.
PS. я хотел бы увидеть лучшее решение этой проблемы.