《Jython2.5》JTree〈GoF〉Visitor を導入する
Java プログラマーのための Python 導入ガイド〈初級/応用編〉《Jython2.5》
JTree〈GoF〉Visitor を導入する
■ 概要
フォルダー/ファイルの階層構造を「簡単に」閲覧できるツールがあると便利です。
この課題では、Swing/GUI を使って階層構造を持つ情報を提示します。〈GoF〉Composite/Iterator/Visitor/Command パターンを導入すると、if/for 文によるコードの汚染、配列の境界問題が解消されるので、要求仕様の変更にも柔軟に対処でき、簡潔で見通しの良いコードを記述できるようになります。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
事例:モジュールを起動する
モジュールを起動すると、次のようなウィンドウが現れます。
$ jython2.5b3 -i exWalkVisitor.py
ボタンによって、テキスト表示〔Text〕とツリー表示〔Tree〕を選択できます。
⇒ 続きはこちら 》コードの解説《 で
事例:テキスト表示
ボタン〔Text〕を押すと、次のようなウィンドウが現れます。
これは、選択したノードの傘下を、テキスト(JTextArea)で表現したものです。この表示は普通の「文字列」なので、そのまま標準出力にも応用できます。
⇒ 続きはこちら 》コードの解説《 で
■ 対話モード
実行中の Java アプリケーションの状態は、Jython の対話モードでも確認できます。
$ jython2.5b3 -i exWalkVisitor.py
>>> m = Xmodel
>>> root = m.view.root; type(root); root
<type 'javax.swing.tree.DefaultMutableTreeNode'>
jreload
大域変数 Xmodel を介して、モデル m を参照できます。最上位のノード root は、DefaultMutableTreeNode で、jreload を保持しています。
>>> s = root.children(); type(s)>>> t = list(s)[-1]; type(t); t <type 'javax.swing.tree.DefaultMutableTreeNode'> src
root の子ノード s における、末尾のノード t は、DefaultMutableTreeNode で、src を保持しています。
>>> node = t.userObject; type(node); node
<class '__main__.DirNode'>
src
ノード t が保持するオブジェクト node は、ディレクトリー DirNode で、src を表現しています。
>>> print node.showTextTree()
src
+-- example
+-- jar-Version.java |
+-- new-Version.java |
+-- PrintVer.java |