Java.use(better); Episode#21 ファインダーを作成する
《前の記事|記事一覧|次の記事》
Java.use(better, Scala);
Episode#21ファインダーを作成する:開け胡麻
自分が楽しまないと本当の仕事はできない
自分が楽しんで仕事をすれば、それが会社の為にも世の中の為にもなる
Takeo Fukui - Wikipedia
《関連記事》
┃開け胡麻:ツリーを利用する
□ コンポーネントの動作を確認する
新たに作成した TreeView の動作を確認するために、簡単なアプリケーションを作成します。これを起動すると、次のようなウインドーが現れます。
$ scala cherry.pie.Tips
任意のツリー項目を選択すると、それに合わせてタイトルが変化します。
たとえば、ツリー項目 blue を選択すると、タイトルが blue に変化します。
9: import swing._ 10: object AppWindow extends MainFrame { 14: title = "TreeView" 15: contents = new View(this) 16: peer.setLocationRelativeTo(null) 17: } 20: class View(frame: Frame) extends BorderPanel { 21: self_ => 22: val treeView = new TreeView { 23: new Publisher { 24: reactions += { 25: case TreeSelectionChanged(source) => update(source) 26: } 27: }.listenTo(this) 28: } 29: new ScrollPane(treeView) { 30: import java.awt.Dimension 31: preferredSize = new Dimension(200,150) 32: self_.add(this, BorderPanel.Position.Center) 33: } 34: def update(source: TreeView) { 35: frame.title = 36: source.peer.getLastSelectedPathComponent.toString 37: } 38: }
[22-28]新たに作成した TreeView を利用するときも、パッケージ scala.swing が提供する他のコンポーネントと同様です。コンポーネントを作成するときに、どのイベントに呼応して何をしたいかを記述するだけです。
[23]Publisher は、[27]これから生成しようとするコンポーネント自身 this で発生したイベントに傾聴 listenTo することで、[24]reactions に登録したイベントに呼応できます。[25]コンストラクターパターンから、イベント TreeSelectionChanged が発生したコンポーネント source を特定できるので、それに対して適切な処理を行います。
[34-37]イベント処理の詳細をここに記述します。ここでは、選択したリスト項目の情報を、ウインドーのタイトルに反映させます。[36]また、peer を介して既存のコンポーネントにアクセスする代わりに(必要なら)これを TreeView の新たなメソッドとして定義できます。たとえば、
: class TreeView extends Component {
: def selectedPath = peer.getLastSelectedPathComponent.toString
新たなメソッド selectedPath を定義するだけで、
: def update(source: TreeView) { : frame.title = source.selectedPath : }
前述したコードの断片は、より簡潔で見通しが良くなります。
Scala では、Java で構築した既存のパッケージ javax.swing を再利用するための仕掛を、パッケージ scala.swing に用意してあるので、新たなコンポーネントを追加/拡張するのも容易です。
》作業中です《
↑ TOP