《余録》Swing/Jython - DefaultMutableTreeNode
Java プログラマーのための Python 導入ガイド《記事一覧》
DefaultMutableTreeNode
■ 概要
フォルダー/ファイルの階層構造を Swing/GUI を利用して「簡単に」閲覧できるツールがあると便利です。
セミナー課題では、JTree/DefaultMutableTreeNode と同等の機能を「実現する」方法を紹介しました。 ここでは、入門者向けに、既存の機能を「利用する」方法を紹介するとともに、その問題点について考察します。 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事
- Java/Python 導入ガイド:Swing/Jython2.5 - JTree - 続・ひよ子のきもち, Swing/Jython - JTree
- Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle, DefaultMutableTreeNode
事例:モジュールを起動する
モジュールを起動すると、次のようなウィンドウが現れます。
$ 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 を実現するとともに、〈GoF〉Iterator パターンを適用するために、メソッド __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
》作業中です《