《余録》Swing/Jython - DefaultMutableTreeNode

Java プログラマーのための Python 導入ガイド記事一覧
DefaultMutableTreeNode

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03

■ 概要

フォルダー/ファイルの階層構造を Swing/GUI を利用して「簡単に」閲覧できるツールがあると便利です。

 セミナー課題では、JTree/DefaultMutableTreeNode と同等の機能を「実現する」方法を紹介しました。
 ここでは、入門者向けに、既存の機能を「利用する」方法を紹介するとともに、その問題点について考察します。

 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。

事例:モジュールを起動する

モジュールを起動すると、次のようなウィンドウが現れます。

$ jython2.5b3 -i exWalkVisitor.py 


>>> m = Xmodel
>>> root = m.view.root; type(root); root
<type 'javax.swing.tree.DefaultMutableTreeNode'>
jreload

最上位のノード root は、DefaultMutableTreeNode で、jreload を保持しています。そこで、引き続き対話モードで、既存の機能を確認します。

■ 前順走査:preorderEnumeration

メソッド preorderEnumeration を利用すると、その傘下にある各ノードを「前順走査」できます。

>>> for e in root.preorderEnumeration(): print e
... 
jreload
_xample
Version.class
example.jar
src
example
jar-Version.java
new-Version.java
PrintVer.java

今回の課題では、これに相当するメソッド preorder を実現するとともに、〈GoFIterator パターンを適用するために、メソッド __iter__ を再定義しています。

■ 何が問題か:ツリーを表示する

今回のセミナー課題では、文字列を使ってツリーを表示します。そのためには、preorderEnumeration だけでは不十分です。たとえば、各ノードのインデントを表現するために、新たな機能を実現する必要があります。

⇒ 続きはこちら 〈GoF〉Iterator を導入する

その他の事例:

■ 後順走査:postorderEnumeration

メソッド postorderEnumeration を利用すると、その傘下にある各ノードを「後順走査」できます。

>>> for e in root.postorderEnumeration(): print e
... 
Version.class
_xample
example.jar
jar-Version.java
new-Version.java
PrintVer.java
example
src
jreload

これは、メソッド depthFirstEnumeration を適用したのと同じ結果になります。

■ 幅優先走査:breadthFirstEnumeration

メソッド breadthFirstEnumeration を利用すると、その傘下にある各ノードを「幅優先走査」できます。

>>> for e in root.breadthFirstEnumeration(): print e
... 
jreload
_xample
example.jar
src
Version.class
example
jar-Version.java
new-Version.java
PrintVer.java

Tips

》作業中です《

Last updated♪09/05/20