例題で学ぶデザインパターン #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)