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