Давным-давно я написал что-то подобное. Это не было предназначено, чтобы быть иерархическим. Он опирался на каждый компонент, имеющий уникальное и разумное имя. Это было до того, как XML и JSON стали модными, поэтому я просто использовал Properties.
По сути, вы начинаете с верхнего окна, просматриваете все его компоненты и, основываясь на его типе (множество instanceofs), вызываете метод (в настоящее время вы бы дали ему более причудливое имя, например "Marshaller" :-) ) выписать соответствующую информацию, которую пользователь может изменить и захотеть восстановить. Применить рекурсивно. Вы получите что-то вроде:
MainFrame.background=#FFFFFF
MainFrame.bounds=200,100,400,500
...
MainFrame.Divider.x=122
...
MainFrame.DataPanel.DataTable.Columns.1.x=423
MainFrame.DataPanel.DataTable.Columns.1.width=22
MainFrame.DataPanel.DataTable.Columns.1.sortedby=Name
Возможно, вы могли бы предположить, что это иерархически, но в настоящее время, вероятно, лучше использовать XML или JSON. Но основная концепция может применяться. Вы можете использовать DIP или что-то еще, чтобы определить правильного маршаллера.
Может быть, это даст вам несколько идей. Может быть, нет стандартного способа. Я удивлен, что никто не ответил «о да, используйте Apache this или Guava that или JGoodies» и т. Д.