JTreeのノードに追加したJCheckBoxのチェック状態の保存と復元
Total: 2802
, Today: 2
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
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(...)
で設定し直す必要がある