Swing/UserObjectPersistence の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/UserObjectPersistence へ行く。
- 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: https://lh3.googleusercontent.com/-Foeg7fF4Uj4/VxzbvHpNTUI/AAAAAAAAOTY/LnDkJRi6CtQXJcQAGJ2boc27LJrY_lT-QCCo/s800/UserObjectPersistence.png --- * 概要 [#summary] `JTree`のノードに追加した`JCheckBox`のチェック状態など保持する`UserObject`を永続化可能になるよう設定し、その保存と復元を行います。 #download(https://lh3.googleusercontent.com/-Foeg7fF4Uj4/VxzbvHpNTUI/AAAAAAAAOTY/LnDkJRi6CtQXJcQAGJ2boc27LJrY_lT-QCCo/s800/UserObjectPersistence.png) * サンプルコード [#sourcecode] #code(link){{ 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(); } }} * 解説 [#explanation] 上記のサンプルでは、[[JTreeのすべてのノードにJCheckBoxを追加する>Swing/CheckBoxNodeEditor]]などで使用しているチェックボックス付き`JTree`を、そのチェック状態も含めて永続化を行っています。 - `JTree`の`DefaultTreeModel`や`DefaultMutableTreeNode`はデフォルトで`XMLEncoder`に対応 - `UserObject`として名前とチェック状態を保持する`CheckBoxNode`クラスは`XMLEncoder`に未対応なので、`DefaultPersistenceDelegate`で書き出し保存するプロパティを指定 - `UserObject`として名前とチェック状態を保持する`CheckBoxNode`クラスは`XMLEncoder`に未対応なので`DefaultPersistenceDelegate`で書き出し保存するプロパティを指定 - チェック状態を表す`Status`は列挙型(`Enum`)で作成しているため`XMLEncoder`はデフォルトで永続化に対応 -- `public`なクラスにしておく必要がある - 親ノードなどのチェック状態を更新する`TreeModelListener`は永続化していないので、`XMLDecoder`で`DefaultTreeModel`を復元後に再度`addTreeModelListener(...)`で設定し直す必要がある - 親ノードなどのチェック状態を更新する`TreeModelListener`は永続化していないので`XMLDecoder`で`DefaultTreeModel`を復元後に再度`addTreeModelListener(...)`で設定し直す必要がある * 参考リンク [#reference] - [[JTableのSortKeyを永続化し、ソート状態の保存と復元を行う>Swing/SortKeyPersistence]] - [[JTreeのすべてのノードにJCheckBoxを追加する>Swing/CheckBoxNodeEditor]] - [[JTreeの展開状態を記憶・復元する>Swing/ExpandedDescendants]] * コメント [#comment] #comment #comment