Swing/UserObjectPersistence のバックアップ(No.4)
- バックアップ一覧
 - 差分 を表示
 - 現在との差分 を表示
 - 現在との差分 - Visual を表示
 - ソース を表示
 - Swing/UserObjectPersistence へ行く。
  
- 1 (2016-04-25 (月) 19:05:46)
 - 2 (2016-05-19 (木) 20:51:07)
 - 3 (2017-08-03 (木) 15:40:25)
 - 4 (2018-08-07 (火) 14:38:38)
 - 5 (2020-08-11 (火) 15:16:01)
 - 6 (2022-01-05 (水) 08:27:48)
 - 7 (2025-01-03 (金) 08:57:02)
 - 8 (2025-01-03 (金) 09:01:23)
 - 9 (2025-01-03 (金) 09:02:38)
 - 10 (2025-01-03 (金) 09:03:21)
 - 11 (2025-01-03 (金) 09:04:02)
 - 12 (2025-06-19 (木) 12:41:37)
 - 13 (2025-06-19 (木) 12:43:47)
 
 
- 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で設定し直す必要がある