例題で学ぶデザインパターン #2.1: JTree を利用する

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

例題で学ぶ Jython/Swing デザインパターン《Jython2.5》
JTree を利用する

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

■ 概要

アプリケーションを作成する過程を通して、Jython/Swing によるデザインパターンを習得します。

この課題では、Swing/GUI を使って階層構造を持つ情報を提示します。〈GoF〉Composite/Iterator/Visitor/Command パターンを導入すると、if/for 文によるコードの汚染、配列の境界問題が解消されるので、要求仕様の変更にも柔軟に対処でき、簡潔で見通しの良いコードを記述できるようになります。

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

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

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

$ jython2.5b3 -i step01/TreeEx.py 

 

ツリー JTree を構成する各ノードを選択すると、部分ツリーが表示され(必要なら)スクロールバーが現れます。たとえば、ノード colors を選択すると、その傘下に4つの項目(blue, violet など)が表示され、右側にはスクロールバーが現れます。

事例:Java の世界を Jython から観察する

実行中の Java アプリケーションの状態を、Jython の対話モードで確認できるので便利です。

>>> view = Xview
>>> type(view)
<type 'javax.swing.JTree'>

大域変数 Xview を介して、JTree を参照できます。

    
>>> node colors
すると、選択した子ノード lastPathComponent は、colors だと分かります。
>>> list(node.children())
[blue, violet, red, yellow]
さらに、子ノードの傘下 children には、4つの項目が含まれるのが分かります。これらの項目は、選択したノードによって異なります。

事例:コードの解説

■ モジュール:TreeEx.py
from java.awt import BorderLayout
from javax.swing import JFrame
from javax.swing import JPanel
from javax.swing import JScrollPane
from javax.swing import JTree
from sys import argv

class Window(JFrame):
    def __init__(self, title, **keys):
        global                              Xview; Xview = \
        tree = JTree()
        tree = JScrollPane(tree)
コンストラクター JTree の引数を省略すると、ツリーには初期設定された項目(JTree/colors など)が含まれます。
        panel = JPanel(
            layout = BorderLayout(),
            )
        panel.add(
            tree, BorderLayout.CENTER,
            )
        super(self.__class__,self).__init__(
            title = title,
            contentPane = panel,
            defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
            )
    def open(self, x=0, y=0, w=150, h=100):
        self.bounds = x, y, w, h
        self.visible = True

## ----------------------------------------
def ex(*args):
    window = Window(title = "Step 01:")
    window.open(800, 100, 200, 150)
    
## ----------------------------------------
Xmodel = Xview = Xwindow = None
if __name__=='__main__':
    ex(*argv)

Tips

Jython の対話モードを活用すると、実行中の Java アプリケーションの状態を確認できるので便利です。この機能は、アプリケーションとは独立したものです。そのため、アプリケーションごとに同じ機能を実現しなくても、Jython を活用するだけで、必要な情報がいつでも得られます。
Last updated♪09/06/18