ListCellRendererインターフェース

広告

JComboBoxクラスで表示方法の管理を行っているのが「javax.swing.ListCellRenderer」インターフェースを実装したクラスとなります。標準で用意されているレンダラの代わりにListCellRendererインターフェースを実装したレンダラクラスを定義し設定することでコンボボックスの表示方法を自分で定義することが出来ます。

ListCellRendererインターフェースを実装するにに必要なメソッドは「getListCellRendererComponent」メソッドの1つだけです。詳しい使い方は次のページ以降で見ていきますが、例えば次のようなクラスを定義します。

class MyCellRenderer extends JLabel implements ListCellRenderer {
  public Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus){

    /* 必要な処理を記述する */

  }
}

レンダラ用のクラスはコンボボックスがドロップダウンした時に表示される各項目をどのように表示するかを定義したクラスです。1つ1つの項目が表示されようとするたびにレンダラが参照されます。

上記の場合は基本となるクラスとしてJLabelクラスを設定した場合です。この場合は各項目はJLabelクラスのオブジェクトとして表示されます。どのようなJLabelクラスのオブジェクトなのかは「getListCellRendererComponent」メソッドの中で定義します。

次に作成したクラスからレンダラを作成したらコンボボックスに設定します。コンボボックスに設定するにはJComboBoxクラスで用意されている「setRenderer」メソッドを使います。

JComboBox フィールドのリストから選択されたリスト項目と項目をペイントする
レンダリングを設定します。レンダリングは、JComboBox が編集不可能な場合に
使用されます。編集可能な場合、選択された項目のレンダリングと編集にはエディ
タが使用されます。

デフォルトのレンダリングでは文字列またはアイコンが表示されます。ほかのレ
ンダリングは、グラフィックイメージおよび複合項目を処理できます。

選択された項目を表示するには、リストオブジェクトおよびインデックス -1 を
渡して aRenderer.getListCellRendererComponent を呼び出します。

パラメータ:
  aRenderer - 選択された項目を表示する ListCellRenderer

実際の使い方は次のようになります。

JComboBox combo = new JComboBox();

MyCellRenderer renderer = new MyCellRenderer();
combo.setRenderer(renderer);

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)