В общем случае проблема почти неразрешима. Вот почему он не является частью ядра Swing.
Технически, отключение и сохранение старого состояния, за которым следует включение и восстановление в старое состояние, может выглядеть привлекательно. Это даже может быть приятно иметь в особых случаях. Но есть (по крайней мере, вероятно, еще куча) две проблемы с этим.
Составные компоненты
Рекурсия должна останавливаться на «составном компоненте» (или «единственном объекте»). Тогда компонент отвечает за сохранение состояния зависимого. Нет общего способа обнаружить такой компонент - например, JComboBox, JXDatePicker (который как проблема )
Чтобы сделать вещи еще более сложными, иждивенцы не должны находиться в иерархии «составного компонента», например JXTable заботится о включенном состоянии ColumnControl (и заголовка).
Попытка решить обе проблемы потребует
а) свойство комплекса: «не трогай моих детей» и
б) собственность на безусловных иждивенцев: «не трогай меня»
Связывание с включенным
enable-and-update-old-old может нарушить состояние приложения, если включенный статус связан со свойством модели (презентация или другое) и это свойство тем временем изменилось - теперь старое состояние недопустимо.
Попытка заняться тем, что потребует
c) «реальное» свойство «сохранено-старое-включено-из-за-просмотра-проблем»
d) связать свойство модели презентации как с включенным, так и с сохраненным старым включенным
У JXRadioGroup есть вариант этой проблемы: При отключении - сама группа или общий контроллер - отслеживает старое включение каждой кнопки. Кнопка включена контролируется действием - если есть действие. Таким образом, активированному контроллеру необходимо восстановить старый или активированный. Когда группа отключена (as-group), проблема вырисовывается, если для параметра «Действие включено» было ложно при сохранении и было изменено значение «истина».
Другое, если добавлены действия.
Теперь представьте сложность переходов между состояниями при перегрузке а) - г)