概要

JTreeのノードに追加したJCheckBoxのチェック状態など保持するUserObjectを永続化可能になるよう設定し、その保存と復元を行います。

サンプルコード

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を、そのチェック状態も含めて永続化を行っています。

  • JTreeDefaultTreeModelDefaultMutableTreeNodeはデフォルトでXMLEncoderに対応
  • UserObjectとして名前とチェック状態を保持するCheckBoxNodeクラスはXMLEncoderに未対応なのでDefaultPersistenceDelegateで書き出し保存するプロパティを指定
  • チェック状態を表すStatusは列挙型(Enum)で作成しているためXMLEncoderはデフォルトで永続化に対応
    • publicなクラスにしておく必要がある
  • 親ノードなどのチェック状態を更新するTreeModelListenerは永続化していないのでXMLDecoderDefaultTreeModelを復元後に再度addTreeModelListener(...)で設定し直す必要がある

参考リンク

コメント