例題で学ぶデザインパターン #1.1: JList を利用する
例題で学ぶ Jython/Swing デザインパターン《Jython2.5》
JList を利用する
《著》越智ことり+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03
■ 概要
アプリケーションを作成する過程を通して、Jython/Swing によるデザインパターンを習得します。
この課題では、Swing/GUI を使ってモデルの変化に呼応する複数のビューを提示します。〈GoF〉Observer パターンを導入すると、依存性を扱うのが容易になるので、要求仕様の変更にも柔軟に対処でき、簡潔で見通しの良いコードを記述できるようになります。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事
事例:モジュールを起動する
モジュールを起動すると、次のようなウィンドウが現れます。
$ jython2.5.0 -i step01/ListEx.py
リスト JList を構成する各項目を選択できます。
事例:Java の世界を Jython から観察する
実行中の Java アプリケーションの状態を、Jython の対話モードで確認できるので便利です。
>>> view = Xview
>>> type(view)
<type 'javax.swing.JList'>
大域変数 Xview を介して、JList を参照できます。
>>> value u'aqua' >>> type(value)すると、選択した項目 selectedValue は、aqua だと分かります。この値は、選択した項目によって異なります。 >>> type(model) 140さらに、JList のリスト項目を保持するデータモデル model も参照できて、そこには 140 個の項目が含まれるのが分かります。事例:コードの解説
■ モジュール:ListEx.py
#! /usr/local/bin/jython2.5.0 from java.awt import BorderLayout from javax.swing import JFrame from javax.swing import JList from javax.swing import JPanel from javax.swing import JScrollPane from pawt import colors from sys import argvモジュール pawt を取り込むと(Jython で規定された)多彩な色の名前を利用できます。class Window(JFrame): def __init__(self, title, *args, **keys): listData = [e for e in dir(colors) if not e.startswith("_")] global Xview; Xview = \ list = JList(listData)コンストラクター JList の引数にリストを指定すると、各要素を列挙した項目が表示されます。panel = JPanel( layout = BorderLayout(), ) panel.add( JScrollPane(list), 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): global Xwindow; Xwindow = \ window = Window(title = "Step 01:") window.open(800, 100, 200, 150) ## ---------------------------------------- Xmodel = Xview = Xwindow = None if __name__=='__main__': ex(*argv)