気軽に Swing《4》JPanel: グループリーグ 1/5

Previous|1/5|Next
Java.use(better, Swing=Jython) # 萬プログラマーのための Python 導入ガイド記事一覧
《4》JPanel: グループリーグ

《著》伊藤うさぎ、森こねこ《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/12/29 ● 第2版♪2006/10/02 ● 更新♪2008/09/19

対象読者

こんな症状を抱えているなら (@.@)
Java で構築されたレガシーシステムを再構成したい
【効能】既存のリソースを再利用しつつ、同時に開発効率を改善できるかも
【注意】記事の主旨から「先に示したプログラムが後で覆される」事例が含まれます。次の展開(失敗から何を学ぶか/学ばないか)を予想しながら読み進むのも一興です。

今回の課題:各チームをグループ別に表示しよう

【要求仕様】各チームをグループ別に表示したい。
リスト項目を表示するときに、各チームをグループ別(同じ行)に分類します。


例題を起動すると、各チームの情報が表示されます。リスト項目には、同じグループのチームが「横1行に並ぶ」ようにして表示されます。ここでは、日本(JPN)が、ブラジル(BRA)オーストラリア(AUS)クロアチア(CRO)とともに、同じグループFに属するのが分かります。1)リスト項目からチームを選択すると、2)ボタンに旗が表示されます。このボタンを選択すると、3)新たなウィンドウにユニフォームが表示されます。これを実現したのが、次のコードです。

class TeamPanel(JPanel):
... No change ...
def __init__(self, listData):
self.layout = BorderLayout()
e = self._selectPanel(listData)
self.add(e, BorderLayout.CENTER)
e = self.textView = JTextArea(
rows=5,
lineWrap=True,
wrapStyleWord=True,
)
self.add(JScrollPane(e), BorderLayout.SOUTH)
self._resetImage(self.team)
self._resetText(self.team)
def _selectPanel(self, listData):
panel = JPanel(
layout=BorderLayout(),
)
e = self.imageView = JButton(
actionPerformed=self.actionPerformed,
)
panel.add(e, BorderLayout.WEST)
e = self.listView = JList(
listData=listData,
layoutOrientation=JList.HORIZONTAL_WRAP,
valueChanged=self.valueChanged,
)
panel.add(JScrollPane(e), BorderLayout.CENTER)
return panel

class KitPanel(JPanel):
... No change ...
def __init__(self, team):
self.layout = BoxLayout(self, BoxLayout.Y_AXIS)
e = self.team = team
... No change ...

def ex_TeamPanel():
listData = [
"GER", "ECU", "POL", "CRC", # Group A
"ENG", "SWE", "PAR", "TRI", # Group B
"ARG", "NED", "CIV", "SCG", # Group C
"POR", "MEX", "ANG", "IRN", # Group D
"ITA", "GHA", "CZE", "USA", # Group E
"BRA", "AUS", "CRO", "JPN", # Group F
"SUI", "FRA", "KOR", "TOG", # Group G
"ESP", "UKR", "TUN", "KSA", # Group H
]
... No change ...

ではこれから、このコードに至るまでの物語を始めます。今回の要求仕様では、各チームをグループ別に表示するために、既存のリソースを変更する必要があります。


Previous|1/5|Next