Swing/UserObjectPersistence のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/UserObjectPersistence へ行く。
- category: swing folder: UserObjectPersistence title: JTreeのノードに追加したJCheckBoxのチェック状態の保存と復元 tags: [JTree, JCheckBox, XMLEncoder, XMLDecoder] author: aterai pubdate: 2016-04-25T00:07:44+09:00 description: JTreeのノードに追加したJCheckBoxのチェック状態など保持するUserObjectを永続化可能になるよう設定し、その保存と復元を行います。 image:
概要
JTree
のノードに追加したJCheckBox
のチェック状態など保持するUserObject
を永続化可能になるよう設定し、その保存と復元を行います。
Screenshot
Advertisement
サンプルコード
try {
File file = new File("output.xml");
try (XMLEncoder xe = new XMLEncoder(
new BufferedOutputStream(new FileOutputStream(file)))) {
xe.setPersistenceDelegate(
CheckBoxNode.class,
new DefaultPersistenceDelegate(new String[] {"label", "status"}));
xe.writeObject(tree.getModel());
}
} catch (IOException ex) {
ex.printStackTrace();
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTreeのすべてのノードにJCheckBoxを追加するなどで使用しているチェックボックス付きJTree
を、そのチェック状態も含めて永続化を行っています。
JTree
のDefaultTreeModel
やDefaultMutableTreeNode
は、デフォルトでXMLEncoder
に対応UserObject
として名前とチェック状態を保持するCheckBoxNode
クラスはXMLEncoder
に未対応なので、DefaultPersistenceDelegate
で書き出し保存するプロパティを指定- チェック状態を表す
Status
は列挙型(Enum
)で作成しているため、XMLEncoder
はデフォルトで永続化に対応public
なクラスにしておく必要がある
- 親ノードなどのチェック状態を更新する
TreeModelListener
は永続化していないので、XMLDecoder
でDefaultTreeModel
を復元後に再度addTreeModelListener(...)
で設定し直す必要がある