Java.use(better); Episode#23 ファインダーを作成する
┃パス名を指定する:入力フィールドを利用する
前回に続き、アプリケーションを進化させます。今回は、入力したパス名を頂点として、ファイルシステムから得られる情報を表示します。
$ scala cherry.pie.Tips
アプリケーションを起動すると、次のようなウインドーが現れます。
(上)フィールドにパス名を入力すると(右下)テキスト領域にファイルシステムから得られる情報が表示されます。このとき「+」に続くのはフォルダーで「.」に続くのはファイルです。先行するインデントが、その階層に相当します。表示した情報はプレーンテキストなので、他のアプリケーションでも再利用できます。
■ イベントを処理する
前回に続き、イベント処理を進化させます。今回は、入力したパス名を頂点として、ファイルシステムから得られる情報を表示します。
20: class View(frame: Frame) extends BorderPanel { 21: self_ => 22: import swing.event.EditDone 23: val textField = new TextField { 24: new Publisher { 25: reactions += { 26: case EditDone(source) => update(text) 27: } 28: }.listenTo(this) 29: self_.add(this, BorderPanel.Position.North) 30: } 31: def update(s: String) { 32: s match { 33: case "" => 34: case s => updateTextArea(new FileSystem(s)) 35: } 36: } 37: def updateTextArea(fs: FileSystem) { 38: textArea.text = "" 39: textArea.append("%s\n" format fs) 40: textArea.caret.position = 0 41: }
[22-30]コンポーネント TextField を生成するときに、どのイベントに呼応して何をしたいかを記述します。[24]Publisher は、[28]生成するコンポーネント this で発生したイベントに傾聴 listenTo して、[25]reactions に登録したイベントに呼応します。[26]コンストラクターパターンから、イベント EditDone が発生したコンポーネント source を特定できますが(それを無視して)フィールドに入力されたテキスト text を利用します。
[37-41]フィールドにパス名を入力したときに発生するイベントに呼応します。テキスト領域に表示された情報を消去して、新たな情報を追記してからキャレットを戻すと、ファイルシステムから得られる情報を先頭から閲覧できます。
》作業中です《
↑ TOP