Java.use(better, Jython=Swing);《7》インスペクター

前の記事記事一覧次の記事
Java.use(better, Jython=Swing);


Java プログラマーのための Python 導入ガイド

第1版♪2003/05/23

■ 概要

リファクタリングを実践して、インスペクターを規定するクラスを抽出します。

(^.^)

インスペクター

class Inspector:
    def __init__(self, it):
        self.it = it
        self.inspectorView()
    def inspectorView(self):
        panel = JPanel(layout=BorderLayout())
        panel.add(self.listView(), BorderLayout.WEST)
        panel.add(self.textView(), BorderLayout.CENTER)
        frame = JFrame(
            size=(280, 100), 
            title="Inspect: %s ~(^^(..)^^)~"%self.it.__class__, 
            )
        frame.add(panel)
        frame.visible = True
    def listView(self):
        model = DefaultListModel()
        model.addElement("self")
        for e in [e for e in dir(self.it)
                        if not e.startswith("__")]:
            model.addElement(e)
        beansButton = JCheckBox(
            label="JavaBeans", actionPerformed=self._beans)
        buttonPanel = JPanel(layout=GridLayout(1, 0))
        buttonPanel.add(beansButton)
        listView = JList(model=model, valueChanged=self._display)
        panel = JPanel(layout=BorderLayout())
        panel.add(buttonPanel, BorderLayout.NORTH)
        panel.add(JScrollPane(listView), BorderLayout.CENTER)
        return panel
    def textView(self):
        acceptButton = JButton(
            label="accept", actionPerformed=self._accept)
        self.textView = JTextArea(
            lineWrap=True, wrapStyleWord=True)
        panel = JPanel(layout=BorderLayout())
        panel.add(acceptButton, BorderLayout.NORTH)
        panel.add(JScrollPane(self.textView), BorderLayout.CENTER)
        return panel
    def _beans(self, e): pass
    def _display(self, e):
        name = e.source.selectedValue
        if name == "self":
            s = self.it
        else:
            s = getattr(self.it, name)
        self.textView.text = ""
        self.textView.append(str(s))
    def _accept(self, e): pass

リファクタリングの効能は、各ツールを構成する部品群からも確認できます。ここで着目して欲しいのは、2つのツール Workspace/Inspector を構成する部品の階層構造と、2つのメソッド workspaceView/inspectorView を構成する機能の階層構造との対応関係です。これらの対応関係は、下位の部品群 JMenuBar/JTextArea/JList と、下位のメソッド群 menuBar/textView/listView へと伝播するのが分かります。

Last updated♪2009/08/14