インスペクターを起動する

次のクラス InspectorPanel は、インスペクターの核となるパネルを規定します。

class InspectorPanel(JPanel):
def __init__(self, target):
... No change ...
e = self.buttonView = JButton(
text="inspect",
actionPerformed=self.actionPerformed,
)
self.add(e, BorderLayout.NORTH)
... No change ...
def actionPerformed(self, e):
target = eval("self.target.%s"%self.selectedValue)
Inspector(target).show()
def valueChanged(self, e):
self.selectedValue = s = e.source.selectedValue
self.textView.text = `eval("self.target.%s"%s)`
self.textView.caretPosition = 0
self.helpView.text = `eval("type(self.target.%s)"%s)`

class Inspector:
def __init__(self, target):
self.panel = InspectorPanel(target)
def show(self):
e = self.panel
frame = JFrame(
defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
title="Inspector: %s"%e.target.__class__.__name__,
)
frame.add(e)
frame.pack()
frame.show()

def ex_Inspector():
target = Inspector(JButton()) # Here goes! (@.@)
Inspector(target).show()

おもな変更点は、リファクタリングを実施して、パネルを組み込んだウィンドウを起動するために、新たなクラス Inspector を抽出したことです。また、選択したときの処理を規定するために、ラベル JLabel の代わりに、ボタン JButton を利用します。