カスタマイザを作る

カスタマイザ(Customizer)は Beanを設計するための専用の GUIパネルを提供します。 その作成の方法と利用の方法について解説します。
プロパティエディタが個々のプロパティの操作の GUIを提供するのに対し、 カスタマイザは Bean全体の設計の GUIを提供するためのクラスです。 専用のプロパティエディタが複数存在するような場合は、 それらをまとめて専用のカスタマイザを設計するのも1つの方法でしょう。
カスタマイザのクラスは java.beans.Customizer インターフェイスを 実装する必要があります。 実装すべきメソッドは setObject(), addProperyChangeListener(), removePropertyChangeListener() の3個のみです。 したがって SimpleBeanInfoや PropertyEditorSupportに相当する 便利なクラスは提供されていません。 またカスタマイザのクラスは通常独立した Panelオブジェクトを継承する ように記述しますから、 結局はCustomizerインターフェイスは直接実装しなくてはなりません。 クラス名は 「Bean名 + Customizer」とします。
サンプルを紹介しましょう。PhotoButtonのBeanの写真のイメージの カスタマイザのクラス PhotoButtonCustomizerです。 一般にカスタマイザのクラスは Bean本体よりも複雑になることは珍しくありません。 ここのサンプルでも、選択用のボタンとしてカスタマイザ内に PhotoButton の Bean 自身が利用されています。

参照: PhotoButtonCustomizer のソース

カスタマイザを設計する上でポイントとなる部分をまとめておきましょう。

  1. カスタマイザの作業の中心になるのが setObjetc()メソッドです。 このメソッドは開発ツールの側によって呼び出され、 設計の対象となっているオブジェクトが設定されます。 カスタマイザから見れば、単に対象となるオブジェクトを受け取るだけのことです。
  2. プロパティの変更を知らせる役割をするのが PropertyChangeEvent です。 このイベントの対象の登録、削除はカスタマイザの仕事ですが、 それを助けるために PropetyChangeSupportクラスが用意されています。 実際には、このクラスのオブジェクトを生成し、必要な作業をさせることができます。
  3. 親切な開発ツールの場合には、 カスタマイザのクラス名から判断してくれるかもしれません。 ただし、それは保証されているわけではありません。 プロパティエディタの情報は BeanInfoのクラスの内部に記述 しておくべきです。プロパティエディタの情報は BeanDesciptorの中に 記憶されるので、BeanInfoのクラスの getBeanDescriptor()メソッドを きちんと実装する必要があります。

    参照: PhotoButotnBeanInfo のソース

  4. 親切な開発ツールの場合には、 Beanを読み込んだ時点で自動的にカスタマイザを起動してくれるでしょう。 しかし、BeanBoxはそのような仕様になっていないので注意してください。 カスタマイザを呼び出すには Editメニューの中の "Customiser" を選択します。 すると専用のカスタマイザが表示されるはずです。