例題で学ぶデザインパターン #2: JTextArea を利用する
例題で学ぶ Jython/Swing デザインパターン《Jython2.5》
JTextArea を利用する
《著》越智ことり+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第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 で再構成しました。
■ 関連記事
事例:モジュールを起動する
モジュールを起動すると、次のようなウィンドウが現れます。
$ jython2.5b3 -i step02/TreeEx.py
ツリー JTree を構成する各ノードを選択すると、その項目の名前がテキスト領域 JTextArea に表示されます。たとえば、ノード violet を選択すると、テキスト領域に文字列 violet が表示されます。
事例:Java の世界を Jython から観察する
実行中の Java アプリケーションの状態を、Jython の対話モードで確認できるので便利です。
>>> view = Xview >>> type(view) >>> type(node)大域変数 Xview を介して、JTree を参照できます。すると、選択した子ノード node は、violet だと分かります。>>> node violet 《Note》path により、選択したノードのパス要素が得られます。さらに、lastPathComponent により、パスの末尾にあるコンポーネント(ノード DefaultMutableTreeNode)が得られます。事例:コードの解説
■ モジュール:TreeEx.py
... from javax.swing import JSplitPane from javax.swing import JTextArea class View(JPanel): def __init__(self, **keys): super(self.__class__,self).__init__( layout = BorderLayout(), ) global Xview; Xview = \ self.tree = JTree( valueChanged = self.valueChanged, )JTree のノードを選択すると(値が変更されたときに)メソッド valueChanged が呼び出されます。tree = JScrollPane(self.tree) self.textArea = JTextArea() textArea = JScrollPane(self.textArea) pane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT) pane.leftComponent = tree pane.rightComponent = textArea self.add( pane, BorderLayout.CENTER, ) def valueChanged(self, e): node = e.path.lastPathComponent self.textArea.text = str(node)ノードを選択した(値が変更された)ときに発生するイベント e から、選択した項目 node が得られます。class Window(JFrame): def __init__(self, title, **keys): super(self.__class__,self).__init__( title = title, contentPane = View(), defaultCloseOperation = JFrame.EXIT_ON_CLOSE, ) ## ---------------------------------------- def ex(*args): window = Window(title = "Step 02:") window.open(800, 100, 250, 200)Tips
》作業中です《Last updated♪09/06/18