概要

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 all

解説

上記のサンプルでは、JTreeのすべてのノードにJCheckBoxを追加するなどで使用しているチェックボックス付きJTreeを、そのチェック状態も含めて永続化を行っています。

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

参考リンク

コメント