プロパティエディタを作る
プロパティエディタ(Property Editor)は Beanの性質を決めるプロパティ
の調整を独自のインターフェイスで実行できるようにするためのものです。
その作成の方法と利用の方法について解説します。
Beanを開発ツール上で設計するためには、開発ツールの側に
Beanのプロパティを操作するGUIが用意されている必要があります。
単純な数値や文字列のような必ず利用されるプロパティについては、
開発ツールの側で事前に対応できるでしょう。
しかし、いつもそうとは限りません。
プロパティは任意のクラスのオブジェクトになりうるからです。
Beanが独自に用意したクラスのプロパティなどの場合には、
Beanの側で何らかの設計のためのGUIを用意することになります。
あるいは、既存のクラスのデータでも、限定された範囲の中から選択する
ような場合には、やはり独自のGUIを用意した方がいいかもしれません。
そうした独自の GUIを提供するのがプロパティエディタの役割です。
たとえば Imageのデータを考えてみましょう。
開発ツールによっては、Imageの選択を行えるようなエディタを既に
組み込んでいるものもあるかもしれません。
しかし BeanBoxには残念ながら Imageを選択するためのエディタが備えられては
いません。
そこで、この PhotoButtonの Beanはプロパティエディタを
独自に設計してみることにします。
ここで例に取り上げる Beanは、与えられたいくつかの画像データ(人の顔の写真)
の中から1つを選択してボタンの上に張り付けることができるようにしたものです。
参照: PhotoButton の Beanのソース
プロパティエディタのクラスは java.beans.PropertyEditor インターフェイスを
実装するか、
もしくは java.beans.PropertyEditorSupportクラスを継承する必要があります。
また、クラス名は 「プロパティ名 + Editor」もしくは「型名 + Editor」と
するのが習慣です。
単純なサンプルを紹介しましょう。PhotoButtonのBeanの写真のイメージの
プロパティ photo を操作するためのプロパティエディタのクラス PhotoEdiorです。
java.beans.PropertyEditorSupportを利用しているので、
それほど複雑な内容ではありません。
参照: PhotoEditor のソース
より本格的なプロパティエディタを設計する上でポイントとなる部分をまとめて
おきましょう。
- 作成したプロパティエディタは、開発ツールのデフォルトのパネル上に表示させる
ことも、独立したウィンドウとして表示させることもどちらも可能です。
独立したウィンドウとするためには、Panelなどのウィンドウのオブジェクトを
継承し、java.benas.PropertyEditorを直接実装することになります。
また supportsCustomEditor()メソッドの返値を trueに設定することで、
独立したウィンドウを使用することを開発ツールに知らせます。
(PropertyEditorSupportのデフォルトの返値は falseです。したがって、
上のサンプルは開発ツールのデフォルトのパネル上に表示されています。)
- プロパティエディタの中心の仕事は getValue()およびsetValue()メソッドに
よって行われます。プロパティエディタの主要な使命はこれらを用意することです。
これらのメソッドは、
開発ツールによって(そのユーザーの操作にしたがって)呼び出されることになります。
- どんなクラスのデータに対しても Stringのデータの入力で指定ができるように
getAsText()と setAsText()のメソッドが用意されています。
GUIを設計するのが面倒な場合にはとりあえずこれらを利用すれば最低限の
機能は確保できます。
限定された項目から選択する場合には getTags()メソッドで指定します。
- 親切な開発ツールの場合には、プロパティエディタのクラス名から判断して
必要な時に自動的に呼び出してくれるかもしれません。ただし、それは保証されている
わけではないので、プロパティエディタの情報は BeanInfoのクラスの内部に記述
しておくべきです。プロパティエディタの情報は PropertyDesciptorの中に
記憶されるので、BeanInfoのクラスの getPropertyDescriptors()メソッドを
きちんと実装する必要があります。
参照: PhotoButotnBeanInfo のソース