気軽に Swing《2》JTextArea: 各チーム紹介 1/5

Previous|1/5|Next
Java.use(better, Swing=Jython) 〜 萬プログラマーのための Python 導入ガイド記事一覧
《2》JTextArea: 各チーム紹介

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

対象読者

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

今回の課題:相手チームを知ろう

【要求仕様】加えて、全32チームの個別情報を表示したい。
サンプルフォルダー Teams には、各チームの情報(テキストファイル)があります。実際に利用するときには、読者のみなさんが望む情報を収集してください。


アプリケーションを起動すると、ドイツ大会の優勝チーム Italy (ITA) の旗のほかに、関連情報が右下の領域に表示されます。これを実現したのが、次のコードです。

class TeamPanel(JPanel):
team = "ITA"
imageFile = "TeamFlags/%s.gif"
textFile = "Teams/%s.txt"
def __init__(self, listData):
self.layout = BorderLayout()
self.listView = e = JList(
listData=listData,
valueChanged=self.valueChanged,
)
self.add(JScrollPane(e), BorderLayout.WEST)
self.imageView = e = JLabel()
self.add(e, BorderLayout.NORTH)
e = self.textView = JTextArea(
rows=5,
lineWrap=True,
wrapStyleWord=True,
)
self.add(JScrollPane(e), BorderLayout.CENTER)
self._resetImage(self.team)
self._resetText(self.team)
def valueChanged(self, e):
team = e.source.selectedValue
self._resetImage(team)
self._resetText(team)
def _resetImage(self, team):
self.imageView.icon = ImageIcon(self.imageFile%team)
self.imageView.text = team
def _resetText(self, team):
self.textView.text = ""
for e in file(self.textFile%team).readlines():
self.textView.append(e)
self.textView.caretPosition = 0

def ex_TeamPanel():
listData = [
"ANG", "ARG", "AUS", "BRA", "CIV", "CRC", "CRO", "CZE",
"ECU", "ENG", "ESP", "FRA", "GER", "GHA", "IRN", "ITA",
"JPN", "KOR", "KSA", "MEX", "NED", "PAR", "POL", "POR",
"SCG", "SUI", "SWE", "TOG", "TRI", "TUN", "UKR", "USA",
]
frame = JFrame(
defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
title="2006 FIFA World Cup",
size=(280, 180),
)
frame.add(TeamPanel(listData))
frame.show()

ではこれから、このコードに至るまでの物語を始めます。今回の要求仕様では、関連情報を表示するだけなので、既存のコードの大半を再利用できます。


Previous|1/5|Next