例題で学ぶデザインパターン #11: JButton を利用する
例題で学ぶ Jython/Swing デザインパターン《Jython2.5》
JButton を利用する
《著》越智ことり+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03
■ 概要
例題により、アプリケーションを作成する過程を通して、Jython/Swing によるデザインパターンを習得します。
この課題では、Swing/GUI を使って階層構造を持つ情報を提示します。〈GoF〉Composite/Iterator/Visitor/Command パターンを導入すると、if/for 文によるコードの汚染、配列の境界問題が解消されるので、要求仕様の変更にも柔軟に対処でき、簡潔で見通しの良いコードを記述できるようになります。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
事例:コードの解説
■ モジュール:TreeView.py
#! /usr/bin/jython2.5b3 ... from java.awt import GridLayout from javax.swing import JButton from TreeComposite import Node ## ---------------------------------------- class View(JPanel): def __init__(self, **keys): ... for e, constraints in [ (self.init_splitPane(), BorderLayout.CENTER), (self.init_buttons() , BorderLayout.SOUTH ), ]: self.add(e, constraints) def init_splitPane(self): global Xview; Xview = \ self.tree = JTree( valueChanged = self.valueChanged, ) tree = JScrollPane(self.tree) self.textArea = JTextArea( font = Font("Courier", Font.PLAIN, 12), ) textArea = JScrollPane(self.textArea) pane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT) pane.leftComponent = tree pane.rightComponent = textArea return pane def init_buttons(self): button = JButton( label = "Tree", actionPerformed = self.actionPerformed, ) panel = JPanel(GridLayout(1, 0)) panel.add(button) return panel
ボタン JButton を選択するとイベントが発生して、リスナー actionPerformed を起動します。
def valueChanged(self, e): node = e.path.lastPathComponent self.textArea.text = str(Node(node)) def actionPerformed(self, e): window = PopWindow( title = str(self.tree.selectionPath.lastPathComponent), ) window.open()
選択したノード getLastPathComponent を、ウィンドウのタイトルに表示します。
class PopWindow(JFrame): def __init__(self, **keys): super(self.__class__,self).__init__( defaultCloseOperation = JFrame.DISPOSE_ON_CLOSE, **keys) def open(self, x=900, y=200, w=200, h=150): self.bounds = x, y, w, h self.visible = True
新たに導入したクラス PopWindow は、部分ツリーを表示するためのものです。
Tips
》作業中です《
Last updated♪09/06/11