Swing:JList

今回は、2006 ドイツ大会だけを対象とするので、予選リーグを競う全32チームはすでに確定しています。そこで、表示したいリスト項目が「固定である」という仮定に基づいて、話を進めます。


《例題1》java.awt.Color の中から、指定した色を表示したい。


例題を起動すると、1)ウィンドウが現れます。そこで、2)左側のリスト項目を選択すると、3)対応する色が右側のパネルに表示されます。これを実現したのが、次のコードです。

def ex_java_awt_Color():
from java.awt import Color
def paintColor(e):
s = e.source.selectedValue
colorView.background = getattr(Color, s)

listData = [
'black', 'blue', 'cyan', 'darkGray',
'gray', 'green', 'lightGray', 'magenta',
'orange', 'pink', 'red', 'white', 'yellow',
]
listView = JList(
listData=listData,
valueChanged=paintColor,
)
colorView = JPanel()
frame = JFrame(
defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
title="java.awt.Color",
size=(180, 160),
)
frame.add(JScrollPane(listView), BorderLayout.WEST)
frame.add(colorView, BorderLayout.CENTER)
frame.show()

リスト項目を設定する

JList は、多数の項目を限られた領域に表示するのに、便利な機能を提供します。表示したい項目が固定なら、次のように、

javax.swing.JList
public JList(Object[] listData)
public void setListData(Object[] listData)

コンストラクター JList(Object) が便利です。また、インスタンスを生成した後で、メソッド setListData(Object) を利用しても同じ効果が得られます。
他の記事「JavaBeansの美味しい煎り方」で紹介したように、JavaBeans に準拠した Swing には、Jython の便利な機能を適用できます。それは、コンストラクターにキーワード引数を指定することです。次のように、

    view = JList(
listData=listData,

キーワード引数 listData= の後に、表示したい項目 listData を設定します。これは、次のコードと同じ効果が得られます。

    view = JList()
view.setListData(listData)

さらに、Jython 流を貫くなら、次のようになります。

    view = JList()
view.listData = listData

TipsJython では、JavaBeans に準拠したリソースに対して、インスタンスを生成するときにキーワード引数で値を初期設定したり、メソッド呼び出しでは冗長な set/get を省略できます。そのため、Java と比べて、簡潔で見通しの良いコードを記述できます。


Previous|2/5|Next