《Jython2.5》JTree〈GoF〉Visitor を導入する

前の記事記事一覧次の記事

Java プログラマーのための Python 導入ガイド〈初級/応用編〉《Jython2.5》
JTree〈GoF〉Visitor を導入する

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

■ 概要

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

この課題では、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
node にメソッド showTextTree を適用すると、ディレクトリー src を頂点とするツリーを、文字列で表現した結果を出力します。これは、テキスト(JTextArea)で表示したものと同じです。

事例:ツリー表示

ボタン〔Tree〕を押すと、次のようなウィンドウが現れます。

これは、選択したノードの傘下を、ツリー(JTree)で表現したものです。 ⇒ 続きはこちら コードの解説

Tips

》作業中です《
Last updated♪2009/07/08