余録:wcStage2View.py
#! /usr/bin/env python # coding: utf-8 ## ---------------------------------------- from java.awt import BorderLayout from java.awt import Color from javax.swing import ImageIcon from javax.swing import JFrame from javax.swing import JLabel from javax.swing import JPanel from javax.swing import JScrollPane from javax.swing import JSplitPane from javax.swing import JTable from javax.swing import JTree from javax.swing.table import DefaultTableCellRenderer from javax.swing.table import DefaultTableModel from javax.swing.table import TableCellRenderer from javax.swing.tree import DefaultMutableTreeNode from javax.swing.tree import DefaultTreeCellRenderer; from os.path import dirname, exists from sys import argv from wcModel import WcModel from wcTeamView import MyTableCellRenderer ## ---------------------------------------- class Stage2Panel(JPanel): def __init__(self, *args, **keys): super(JPanel,self).__init__( layout = BorderLayout(), **keys ) path = "%s/squad"%(dirname(argv[-1])) def treeView(team=None): self.rootNode = \ final = DefaultMutableTreeNode("Final #64") semi = form = "Semi-finals #%d" for i, matches in enumerate( [(61,62)] ): for e in matches: node = DefaultMutableTreeNode(form%e) final.add(node) semi.append(node) quarter = form = "Quarter-finals #%d" for i, matches in enumerate( [(58,57),(59,60)] ): for e in matches: node = DefaultMutableTreeNode(form%e) semi[i].add(node) quarter.append(node) form = "Round of 16 #%d" for i, matches in enumerate( [(49,50),(53,54),(51,52),(55,56)] ): for e in matches: node = DefaultMutableTreeNode(form%e) quarter[i].add(node) tree = JTree( final, valueChanged = self, ) return tree def tableModel(group=None): class MyTableModel(DefaultTableModel): def getColumnClass(self, c): return self.getValueAt(0, c).__class__ columnNames = "date-time", "home", "score", "away", self.model = \ model = MyTableModel() for e in columnNames: model.addColumn(e) match = self.rootNode.userObject[-2:] _,date,_,_,home,score,away,_ = self._scores(match) model.addRow([date,home,score,away]) return model def tableView(): self.table = \ comp = JTable( model = tableModel(), rowHeight = 60, ) # public void javax.swing.JTable. # setDefaultRenderer() comp.setDefaultRenderer( ImageIcon, # java.lang.Class MyTableCellRenderer(), # javax.swing.table.TableCellRenderer ) return comp def _splitPane(**keys): comp = JSplitPane( orientation = JSplitPane.VERTICAL_SPLIT, oneTouchExpandable = True, dividerLocation = 180, **keys ) return comp def splitPane(): controlPane = JScrollPane( viewportView = treeView(), preferredSize = (280,200), ) canvasPane = JScrollPane( viewportView = tableView(), preferredSize = (320,100), ) return _splitPane( topComponent = controlPane, bottomComponent = canvasPane, ) pane = splitPane() self.add(pane) def show(): frame = JFrame( title = "-- Stage2 --", size = (350,300), locationRelativeTo = None, ) frame.add(Stage2Panel()) frame.visible = True def _scores(self, match): def valid(line, match): return line.startswith(match) path = "%s/matches/stage2.txt"%dirname(argv[-1]) lines = open(path).readlines() if exists(path) else [] for line in lines: if valid(line, match): break return line.split("\t") def __call__(self, e): node = e.source.lastSelectedPathComponent match = node.userObject[-2:] _,date,_,_,home,score,away,_ = self._scores(match) path = "%s/squad"%(dirname(argv[-1])) def team(key): m = WcModel.teamNames return ImageIcon("%s/%s.gif"%(path, m[key])) if key in m else key rowIndex = 0 for columnIndex,aValue in enumerate([ date, team(home), score, team(away), ]): self.model.setValueAt(aValue, rowIndex, columnIndex) ## ========================================
Jython/Swing《余録》2010 FIFA World Cup South Africa™
‖記事一覧‖Java.use(better, Jython=Swing)《Jython2.5》《復刻改訂版》
Java プログラマーのための Python 導入ガイド -- 2010 FIFA World Cup South Africa™
《余録》JTable: 決勝トーナメント
《著》伊藤うさぎ、森こねこ《監修》小粒ちゃん@湘南組、小粒ちゃん@博多組
第1版♪2003/12/29 ● 第2版♪2006/10/02 ● 第3版♪2010/06/11
|関連記事|
2010 FIFA World Cup の開催を機に、Jython2.5 で再構成しました。
課題:2010 FIFA World Cup South Africa™
要求仕様
2010 FIFA World Cup South Africa™ 全試合の戦績を、グループリーグ、決勝トーナメント別に表示したい。
- モジュールを起動すると、
$ jython -i wcExample.py >>>
日本チーム Japan (jpn) の戦績が表示されます。
《余録》日本チームは PK 戦で敗退となりましたが、その足跡をここに残します。2010-06-29
以下の公式サイトから得られる情報をもとに、
その内容を反映したテキストファイル matches/stage2.txt から各チームの戦績を読み込んで、テーブル JTable 内に表示します。
% cat matches/stage2.txt # http://www.fifa.com/worldcup/matches/index.html Round of 16 Match Date - Time Venue Results 49 26/06 23:00 Nelson Mandela Bay/Port Elizabeth Uruguay 2:1 (1:0) Korea Republic ... 55 29/06 23:00 Tshwane/Pretoria Paraguay 0:0 a.e.t. 5:3 PSO Japan ... Quarter-finals Match Date - Time Venue Results 57 02/07 23:00 Nelson Mandela Bay/Port Elizabeth Netherlands 2:1 (0:1) Brazil ... Semi-finals Match Date - Time Venue Results 61 07/07 03:30 Cape Town Uruguay 2:3 (1:1) Netherlands ... Match for third place Match Date - Time Venue Results 63 11/07 03:30 Nelson Mandela Bay/Port Elizabeth Uruguay Background Germany Final Match Date - Time Venue Results 64 12/07 03:30 Johannesburg Netherlands Background Spain ...
↑TOP
》作業中です《
関連記事
- Python への扉 #Jython2.5.1
- 2008-03-17 2006 FIFA World Cup Germany™《旧版》
- INDEX: C《Python》__call__
- INDEX《Swing》caretPosition
- INDEX《Swing》text
- INDEX《Swing》lineWrap
- wrapStyleWord
- font
Last updated♪2010/06/25