イベントリスナー:actionPerformed

改訂したクラス InspectorPanel は、複数のサブパネル(SelectionPanel など)で構成されます。ボタンを選択すると、指定した項目のメンバー特性を確認するために、新たなインスペクターが起動されます。その背景を図解すると、次のようになります。


ボタンを選択するとイベントが発生して、1)リスナーでもある自身のメソッド actionPerformed が呼び出されます。2)選択した項目 listView.selectedValue を頼りに、3)ターゲット self.target のメンバー特性を獲得します。4)獲得した値を観察するために、新たなインスペクター Inspector を起動 show します。

class InspectorPanel(JPanel):
def __init__(self, target):
self.target = target
self.layout = BorderLayout()
e = self.buttonView = JButton(
text="inspect",
actionPerformed=self.actionPerformed,
)
self.add(e, BorderLayout.NORTH)
e = self.listView = SelectionPanel(
client=self,
target=target,
)
self.add(e, BorderLayout.WEST)
e = self.textView = JTextArea(
lineWrap=True,
)
self.add(JScrollPane(e), BorderLayout.CENTER)
e = self.helpView = JTextArea(
lineWrap=True,
)
self.add(JScrollPane(e), BorderLayout.SOUTH)
def actionPerformed(self, e): # 1)
e = self.listView.selectedValue # 2)
e = getattr(self.target, e) # 3)
Inspector(e).show() # 4)
def valueUpdate(self, s):
self.textView.text = `s`
self.textView.caretPosition = 0
self.helpView.text = `type(s)`

メソッド actionPerformed には、インターフェース ActionListener の規定に従って、イベント処理を記述します。ここで、self.listView.selectedValue を参照したのは、選択した項目を SelectionPanel から獲得するためです。全体を俯瞰すると、次のように、


イベントリスナーに対して、1)actionPerformed が呼び出されると、2)サブパネル self.listView からの選択された項目を頼りに、3)自身が観察している対象 self.target から必要な情報を得て、4)それを観察するために新たな Inspector を生成しているのが分かります。


4/5