余録:worldCup/jython/ex10/wcFrame.py

#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
## History: Swing Example "2010 FIFA World Cup South Africa™"
##      2003/07, Java/Jython
##      2006/07, Jython
##      2008/02, Jython 2.2.1
##      2010/06, Jython 2.5.0
#...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
"""
>>> tips()

>>> ## ----------------------------------------
>>> None
version: #1.0.15a
"""
from __init__ import *

## ---------------------------------------- demo: jython
"""
$ cd /Users/sketch/home_sketch/worldCup/jython/
$ jython -i ex10/wcFrame.py

"""
## ----------------------------------------
from wcModel import WcModel

from javax.swing import ImageIcon
from javax.swing import JFrame
from javax.swing import JLabel
from javax.swing import JList
from javax.swing import JPanel
from javax.swing import JScrollPane
from javax.swing import JSplitPane

class TopPanel(JPanel):
    def __init__(self, master, *args, **keys):
        master.contentPane = self

        def leftComponent():
            listData = WcModel.teams            
            view = JList(
                listData,   # java.util.Vector
                valueChanged = self,
                )
            comp = JScrollPane(
                viewportView = view,
                preferredSize = (120,150),
                )
            return comp

        def rightComponent():
            view = JLabel(
                icon = ImageIcon("matches/fifa.png"),
                )
            comp = JScrollPane(
                viewportView = view,
                preferredSize = (180,0),
                )
            return comp

        def splitPane():
            comp = JSplitPane(
                orientation = JSplitPane.HORIZONTAL_SPLIT,
                oneTouchExpandable = True,
                dividerLocation = 100,
                leftComponent  = leftComponent(),
                rightComponent = rightComponent(),
                )
            return comp

        comp = splitPane()
        self.add(comp)
        master.pack()

    def __call__(self, e):  # javax.swing.event.ListSelectionEvent
        value = e.source.selectedValue
        print(":: %s"%WcModel.teamNames[value])

## ----------------------------------------
def tips():
    global Qt; Qt = \
    frame = JFrame(
        title = "FIFA World Cup #10",
        size = (320,180),
        locationRelativeTo = None,
        defaultCloseOperation = JFrame.EXIT_ON_CLOSE,
        )
    TopPanel(frame)
    frame.visible = True

## ----------------------------------------
if __name__=='__main__':
    inform()
    testmod()

## ========================================

余録:worldCup/jython/ex10/wcModel.py

#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
## History: Swing Example "2010 FIFA World Cup South Africa™"
##      2003/07, Java/Jython
##      2006/07, Jython
##      2008/02, Jython 2.2.1
##      2010/06, Jython 2.5.0
#...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
"""
>>> tips()

>>> ## ----------------------------------------
>>> None
version: #1.0.14
"""
print(__name__,"1.0.02")

## ----------------------------------------
class WcModel:

    groups = {
        "A": [                          # Group A
            {"rsa": "South Africa"},
            {"mex": "Mexico"},
            {"uru": "Uruguay"},
            {"fra": "France"},
            ],
        "B": [                          # Group B
            {"arg": "Argentina"},
            {"nga": "Nigeria"},
            {"kor": "Korea Republic"},
            {"gre": "Greece"},
            ],
        "C": [                          # Group C
            {"eng": "England"},
            {"usa": "USA"},
            {"alg": "Algeria"},
            {"svn": "Slovenia"},
            ],
        "D": [                          # Group D
            {"ger": "Germany"},
            {"aus": "Australia"},
            {"srb": "Serbia"},
            {"gha": "Ghana"},
            ],
        "E": [                          # Group E
            {"ned": "Netherlands"},
            {"den": "Denmark"},
            {"jpn": "Japan"},
            {"cmr": "Cameroon"},
            ],
        "F": [                          # Group F
            {"ita": "Italy"},
            {"par": "Paraguay"},
            {"nzl": "New Zealand"},
            {"svk": "Slovakia"},
            ],
        "G": [                          # Group G
            {"bra": "Brazil"},
            {"prk": "Korea DPR"},
            {"civ": "Cote d Ivoire"},
            {"por": "Portugal"},
            ],
        "H": [                          # Group H
            {"esp": "Spain"},
            {"sui": "Switzerland"},
            {"hon": "Honduras"},
            {"chi": "Chile"},
            ],
        }

    teams = sorted([team
        for group in "ABCDEFGH"
        for teams in groups[group] for team in teams])

    teamNames = dict*1

## ========================================

*1:k,v) for group in groups.values() for team in group for k,v in team.items(

Java の素描 #010: リファクタリング:モジュールを利用する

記事一覧 Java.use(better, Swing=Jython) #FIFA World Cup への道《Jython2.5》

Java の素描 Jython 弾丸ツアー:時短プログラミング生活のすすめ 〜

《著》森こねこ、伊藤うさぎ、小粒ちゃん@湘南組《監修》タマゴ倶楽部

第1版♪2003/05/23 ● 第2版♪2006/04/03 ● 第3版♪2010/06/11

step10: リファクタリング:モジュールを利用する

モジュールを利用すると、密接に関連するコードの断片を独立して扱いやすくなります。

モジュールは、複数のクラス(大域変数)群を意味のある構成単位として扱う手段を提供します(カプセル化)。

## ---------------------------------------- wcFrame.py
from wcModel import WcModel
...

class TopPanel(JPanel):
    ...

## ---------------------------------------- wcModel.py
class WcModel:
    ...

ここでは、2つのモジュールに分割します。一方のモジュール wcFrame.py は、他方のモジュール wcModel.py を再利用します。
from/import 文を利用すると、モジュールにある特定の情報だけを参照する手段が得られます。ここでは、次のようにして、

from wcModel import WcModel

他のモジュール wcModel.py に含まれる、クラス WcModel を、自分のモジュール wcFrame.py 内から参照できます。すると、同じモジュール内で定義してあるかのように、クラス WcModel を扱えるようになります。つまり、クラス定義の実体がどこにあるか(where)には依存せずに、これ以降のコード(how)を記述できるのです。

ここでは、リファクタリングの前後で変化がないことを確認します。

》作業中です《


関連記事

TOP

Last updated♪2010/07/28