余録:worldCup/jython/ex08/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.12abcd """ from __init__ import * ## ---------------------------------------- demo: jython """ $ cd /Users/sketch/home_sketch/worldCup/jython/ $ jython -i ex08/wcFrame.py """ ## ---------------------------------------- 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): 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"}, ], } def __init__(self, master, *args, **keys): master.contentPane = self def teams(): return sorted(team for group in "ABCDEFGH" for teams in self.groups[group] for team in teams) def leftComponent(): listData = teams() # class javax.swing.JList # public javax.swing.JList() 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() # interface javax.swing.event.ListSelectionListener # public abstract void # javax.swing.event.ListSelectionListener. # valueChanged() def __call__(self, e): # javax.swing.event.ListSelectionEvent value = e.source.selectedValue teamNames = dict*1 print(":: %s"%teamNames[value]) ## ---------------------------------------- def tips(): global Qt; Qt = \ frame = JFrame( title = "FIFA World Cup #08", size = (320,180), locationRelativeTo = None, defaultCloseOperation = JFrame.EXIT_ON_CLOSE, ) TopPanel(frame) frame.visible = True ## ---------------------------------------- if __name__=='__main__': inform() testmod() ## ========================================
*1:k,v) for group in self.groups.values() for team in group for k,v in team.items(
Java の素描 #008: 辞書を利用する:組み込み型 dict
‖記事一覧‖ Java.use(better, Swing=Jython) #FIFA World Cup への道《Jython2.5》
Java の素描 〜 Jython 弾丸ツアー:時短プログラミング生活のすすめ 〜
《著》森こねこ、伊藤うさぎ、小粒ちゃん@湘南組《監修》タマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2006/04/03 ● 第3版♪2010/06/11
|関連記事|
step08: 辞書を利用する:組み込み型 dict
- Java の素描 #008《Scala2.8.0》
辞書を利用して、各チームの略号と正式名称とを対応させます。
■ 要求仕様: 全チームの一覧表を作成する
全32チームの一覧表(リスト項目)を作成したいとします。各項目を選択すると、チームの情報が得られるようにします。それには、JList を利用すると便利です。
■ JList の動作を確認する
任意の項目を提示して、各項目を選択したときの動作を規定します。チームの略号を列挙した項目を選択すると、その正式名称が得られるようにします。
■ プログラムを変更する
## ---------------------------------------- wcFrame.py class TopPanel(JPanel): groups = { "A": [ # Group A {"rsa": "South Africa"}, {"mex": "Mexico"}, {"uru": "Uruguay"}, {"fra": "France"}, ], ... } def __init__(self, master, *args, **keys): ... def teams(): return sorted(team for group in "ABCDEFGH" for teams in self.groups[group] for team in teams) def __call__(self, e): # javax.swing.event.ListSelectionEvent value = e.source.selectedValue teamNames = dict*1 print(":: %s"%teamNames[value])
■ プログラムを実行する
$ jython -i ex08/wcFrame.py
>>> :: Algeria
- Algeria
- Japan
- Japan
リスト項目には、各チームの略号が整列して(アルファベット順に)表示されます。ここで、リスト項目から "jpn" を選択すると、日本チームの正式名称 Japan が出力されます。
》作業中です《
- 組み込み関数 sorted を利用すると、
- 組み込み関数 dict を利用すると、
*1:k,v) for group in self.groups.values() for team in group for k,v in team.items(