Java.use(better); Episode#22 ファインダーを作成する
《前の記事|記事一覧|次の記事》
Java.use(better, Scala);
Episode#22ファインダーを作成する:履歴を残す
@父親が、子供達にできる最も重要なことは
@子供達の母親を愛することだ
The most important thing a father can do for his children is to love their mother.
Theodore Hesburgh - Wikipedia
《関連記事》
《目的》同じアプリケーションを異なるプログラミング言語 Java/Jython/Scala で作成する過程(作譜:プログラミング)を通して、言語の違いに依らない概念を適用するための手法(算譜:プログラム)を紹介します。
《動機》ともすると、プログラミング言語の違いに目を奪われて、言語の違いに依らないプログラムの本質を見失いがちです。そこに、同じアプリケーションを異なるプログラミング言語で作成することの意義があります。その本質を理解できれば、新たなプログラミング言語を習得するときに役立ちます。
┃履歴を残す:テキスト領域を利用する
前回に続き、アプリケーションを進化させます。今回は、選択したツリー項目の履歴を残します。
■ アプリケーションを起動する
$ scala cherry.pie.Tips
アプリケーションを起動すると、次のようなウインドーが現れます。
(左)リスト項目を選択すると(上)タイトルが変化して(右)テキスト領域に選択した項目の履歴が表示されます。
選択した項目は追記されるので、すべての履歴を参照できます。表示された情報はプレーンテキストなので、他のアプリケーションでも再利用できます。
■ 既存のコンポーネントに組み込む
既存のコンポーネントに、新たに作成した TreeView を組み込みます。コンポーネントの中には、他のコンポーネントを組み込むための「コンテナ」があります。前述した BorderPanel もそのひとつですが、SplitPane も便利な機能を提供します。これを利用すると、引き戸を左右にずらす感覚で、ウインドー内の限られた領域を有効に活用できます。
20: class View(frame: Frame) extends BorderPanel { 21: self_ => 29: val textArea = new TextArea 30: new SplitPane( 31: Orientation.Vertical, 32: new ScrollPane(treeView), 33: new ScrollPane(textArea)) { 34: import java.awt.Dimension 35: preferredSize = new Dimension(300,200) 36: dividerLocation = 100 37: self_.add(this, BorderPanel.Position.Center) 38: } 40: def update(source: TreeView) { 41: val s = source.lastPath 42: frame.title = s 43: textArea.append("%s\n" format s) 44: } 45: }
[30-38]SplitPane のインスタンスを生成するときに、左右に配置するコンポーネントを指定します。[34-37]初期値を設定するだけでなく、ブロック内に任意の処理を記述できます。関係の深いコードの断片が同じブロック内にあると、プログラミング(作譜)の作業効率が上がります。
☞ 余録:インスタンスを生成する
[40-44]ツリー項目を選択したときに発生するイベントに呼応して、タイトルを設定するとともに、テキスト領域に選択した項目を追記します。今回は、新たに追加したメソッド lastPath(後述)を利用します。
19: class TreeView extends Component { 30: def lastPath = peer.getLastSelectedPathComponent.toString 31: }
[30]選択した項目を示す文字列を作成します。プログラミング(作譜)の作業効率を良くするために、このメソッドを追加しました。アジャイル開発に従事するプログラマーには、必要になるまでメソッドを追加せずに、必要になったらすぐに追加する姿勢が望まれます。
》作業中です《
↑ TOP