TITLE:JTreeの展開状態を記憶・復元する

Posted by at 2013-11-18

JTreeの展開状態を記憶・復元する

JTreeでノードの展開状態を記憶、復元します。

  • &jnlp;
  • &jar;
  • &zip;
ExpandedDescendants.png

サンプルコード

visitAll(tree, rootPath, false); //Collapse all
if(expandedState == null) { return; }
while(expandedState.hasMoreElements()) {
  tree.expandPath(expandedState.nextElement());
}
expandedState = tree.getExpandedDescendants(rootPath);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTree#getExpandedDescendants(TreePath)メソッドで展開されているノードのTreePathEnumerationで保存しています。復元は一旦すべてのノードを折り畳んでから、JTree#expandPath(TreePath)Enumeration<TreePath>から取得したノードを展開しています。


  • JTreeのシリアライズに関するのメモ
//XMLEncoderではデフオルトのJTreeの場合、展開状態などは保存されない
//??? 1.7.0_45では、整形式のXMLにならない場合がある ???
XMLEncoder xe = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(xmlFile)));
xe.writeObject(tree);
xe.flush();

//ObjectOutputStreamの場合は、選択状態、展開状態なども保存、復元可能
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(tree);
oos.flush();

参考リンク

コメント