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

Tips

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