モジュール javafx.controls
パッケージ javafx.scene.control

クラスComboBox<T>

  • 型パラメータ:
    T - T - このComboBoxに対して選択されているか、その他の方法で入力されている値の型
    すべての実装されたインタフェース:
    Styleable, EventTarget, Skinnable


    public class ComboBox<T>
    extends ComboBoxBase<T>
    ユーザーに選択肢を提供するポップアップ・リストを表示するという最も一般的な形式のComboBoxのComboBoxBase抽象クラスの実装。 ComboBoxの一般概念およびAPIの詳細は、ComboBoxBaseクラスのドキュメントを参照してください。

    ComboBoxクラスによって、ComboBoxBaseの上に、追加のAPIが導入されます。 最も重要なことは、ListView itemsプロパティとほぼ同じように機能するitemsプロパティが追加されることです。 つまり、ユーザーがComboBoxボタンをクリックすると表示されるアイテム・リストのコンテンツです。

    ComboBoxはComboBoxBaseからComboBoxBase.valueProperty()を公開しますが、ComboBoxとの関連において理解する必要がある、valueプロパティの重要なポイントがいくつかあります。 これには次のものがあります。

    1. valueプロパティは、アイテム・リスト内に含まれているアイテムに制約されません。型Tの有効な値であるかぎり、任意の値を指定できます。
    2. valueプロパティがnull以外のオブジェクトに設定され、その後、アイテム・リストがクリアされた場合、valueプロパティはnullにはなりません
    3. 選択モデルのselectionをクリアしても、valueプロパティがnullになることはなく、前のままです。
    4. 選択モデルで選択を特定のインデックスに設定することは、リストにアイテムがない場合(またはその特定のインデックスよりもリストのアイテムが少ない場合)でも有効です。 アイテム・リストへの移入が進み、指定されたインデックスのアイテムが存在するのに十分なアイテムがリストに含まれるようになると、選択モデルSelectionModel.selectedItemProperty()とvalueプロパティの両方がこの値を持つように更新されます。 このことは、選択モデルを使用するその他のコントロールと一貫しませんが、ComboBoxのために意図的に行われています。

    デフォルトでは、ポップアップ・リストが表示されるとき、表示される最大行数は10ですが、このことはvisibleRowCountプロパティを変更することで変更できます。 ComboBoxのアイテムの数がvisibleRowCountの値よりも少ない場合、ポップアップ・リストが長くなりすぎないように、かわりにアイテムのサイズが使用されます。

    ListViewと同様に、使用されるselection modelを変更できますが、これが変更されることはほとんどありません。 これは、ComboBoxではSingleSelectionModelインスタンスが必要とされ、代替の実装はあまり必要とされないためです。 それでも、選択モデルを切り替えるユースケースが見つかった場合に備えて、このオプションがあります。

    ComboBoxは内部的にListViewを使用してコンテンツをレンダリングするため、ComboBoxクラスにはカスタム・セル・ファクトリを設定できるようにするためのAPIがあります。 セル・ファクトリの詳細は、CellクラスおよびListCellクラスを参照してください。 セル・ファクトリがComboBoxに設定されている場合、ComboBoxをクリックすると表示されるListViewでのみセルが使用されることに注意することが重要です。 また、ComboBoxのボタン領域のレンダリングをカスタマイズする場合は、button cellのプロパティにカスタムのListCellインスタンスを設定できます。 このことを行う1つの方法は、次のコードを使用することです(setButtonCellを使用していることに注意してください)。

     
     Callback<ListView<String>, ListCell<String>> cellFactory = ...;
     ComboBox comboBox = new ComboBox();
     comboBox.setItems(items);
     comboBox.setButtonCell(cellFactory.call(null));
     comboBox.setCellFactory(cellFactory);

    ComboBoxはeditableにでき、ユーザー入力を許可するデフォルトの手段はTextFieldを使用することであるため、開発者がユーザーの文字列を型Tのオブジェクトに変換する方法を指定できるstring converterプロパティが用意され、それをvalueプロパティに含めることができるようになっています。 デフォルトでは、コンバータは単にユーザーが入力したとおりに文字列入力を返すため、編集可能なComboBoxの型は文字列であることが想定されます。 別の型が指定され、ComboBoxが編集可能である場合、カスタムのStringConverterを指定する必要があります。

    ComboBoxアイテム・リストへのノードの挿入に関する警告

    ComboBoxでは、アイテム・リストにNodeインスタンスなど任意の型の要素を含めることができます。 ノードをアイテム・リストに含めることはお薦めしません これは、デフォルトのcell factoryでは、単にNodeアイテムをComboBoxのボタン領域などセルに直接挿入するためです。 シーングラフではノードが一度に1つの場所にのみ存在できるため、選択されたアイテムはComboBoxリストから削除され、ボタン領域に表示されます。 選択を変更すると、前に選択していたアイテムがリストに戻され、新しい選択が削除されます。

    Nodeインスタンスをアイテム・リストに挿入するのではなく、関連情報をComboBoxに含め、カスタムcell factoryを指定するアプローチをお薦めします。 たとえば、次のコードは使用しません。

     
     ComboBox<Rectangle> cmb = new ComboBox<Rectangle>();
     cmb.getItems().addAll(
         new Rectangle(10, 10, Color.RED),
         new Rectangle(10, 10, Color.GREEN),
         new Rectangle(10, 10, Color.BLUE));

    次の手順を実行します。

    
     ComboBox<Color> cmb = new ComboBox<Color>();
     cmb.getItems().addAll(
         Color.RED,
         Color.GREEN,
         Color.BLUE);
    
     cmb.setCellFactory(new Callback<ListView<Color>, ListCell<Color>>() {
         @Override public ListCell<Color> call(ListView<Color> p) {
             return new ListCell<Color>() {
                 private final Rectangle rectangle;
                 {
                     setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                     rectangle = new Rectangle(10, 10);
                 }
    
                 @Override protected void updateItem(Color item, boolean empty) {
                     super.updateItem(item, empty);
    
                     if (item == null || empty) {
                         setGraphic(null);
                     } else {
                         rectangle.setFill(item);
                         setGraphic(rectangle);
                     }
                }
           };
       }
    });

    前述のアプローチの方がかなり冗長ですが、シーングラフの制約が発生することなく、必要な機能が提供されます。

    導入されたバージョン:
    JavaFX 2.1
    関連項目:
    ComboBoxBaseCellListCellStringConverter
    • コンストラクタの詳細

      • ComboBox

        public ComboBox​()
        空のitemsのリストとデフォルトのselection modelでデフォルトのComboBoxインスタンスを作成します。
      • ComboBox

        public ComboBox​(ObservableList<T> items)
        指定されたアイテム・リストとデフォルトのselection modelを含むデフォルトのComboBoxインスタンスを作成します。
        パラメータ:
        items - アイテムのリスト
    • メソッドの詳細

      • setItems

        public final void setItems​(ObservableList<T> value)
        プロパティ・アイテムの値を設定します。
        プロパティの説明:
        ComboBoxポップアップ内に表示するアイテムのリスト。
      • getItems

        public final ObservableList<T> getItems​()
        プロパティ・アイテムの値を取得します。
        プロパティの説明:
        ComboBoxポップアップ内に表示するアイテムのリスト。
      • setConverter

        public final void setConverter​(StringConverter<T> value)
        プロパティconverterの値を設定します。
        プロパティの説明:
        入力をvalueプロパティ経由で取得できるようにするために、(ComboBoxがeditableである場合に)ユーザーの入力をタイプTのオブジェクトに変換します。
      • getConverter

        public final StringConverter<T> getConverter​()
        プロパティconverterの値を取得します。
        プロパティの説明:
        入力をvalueプロパティ経由で取得できるようにするために、(ComboBoxがeditableである場合に)ユーザーの入力をタイプTのオブジェクトに変換します。
      • setCellFactory

        public final void setCellFactory​(Callback<ListView<T>,ListCell<T>> value)
        プロパティcellFactoryの値を設定します。
        プロパティの説明:
        カスタム・セル・ファクトリにより、ComboBoxのアイテムのレンダリングを完全にカスタマイズできます。 セル・ファクトリの詳細は、Cellのjavadocを参照してください。
      • getCellFactory

        public final Callback<ListView<T>,ListCell<T>> getCellFactory​()
        プロパティcellFactoryの値を取得します。
        プロパティの説明:
        カスタム・セル・ファクトリにより、ComboBoxのアイテムのレンダリングを完全にカスタマイズできます。 セル・ファクトリの詳細は、Cellのjavadocを参照してください。
      • buttonCellProperty

        public ObjectProperty<ListCell<T>> buttonCellProperty​()
        ボタン・セルを使用して、ComboBoxのボタン領域に表示される内容をレンダリングします。 ここにセルが設定されている場合、ComboBoxポップアップ・リストのレンダリングは変更されません。そのレンダリングは、cell factory APIによって制御されます。
        導入されたバージョン:
        JavaFX 2.2
        関連項目:
        getButtonCell()setButtonCell(ListCell)
      • setButtonCell

        public final void setButtonCell​(ListCell<T> value)
        プロパティbuttonCellの値を設定します。
        プロパティの説明:
        ボタン・セルを使用して、ComboBoxのボタン領域に表示される内容をレンダリングします。 ここにセルが設定されている場合、ComboBoxポップアップ・リストのレンダリングは変更されません。そのレンダリングは、cell factory APIによって制御されます。
        導入されたバージョン:
        JavaFX 2.2
      • getButtonCell

        public final ListCell<T> getButtonCell​()
        プロパティbuttonCellの値を取得します。
        プロパティの説明:
        ボタン・セルを使用して、ComboBoxのボタン領域に表示される内容をレンダリングします。 ここにセルが設定されている場合、ComboBoxポップアップ・リストのレンダリングは変更されません。そのレンダリングは、cell factory APIによって制御されます。
        導入されたバージョン:
        JavaFX 2.2
      • setSelectionModel

        public final void setSelectionModel​(SingleSelectionModel<T> value)
        プロパティselectionModelの値を設定します。
        プロパティの説明:
        ComboBoxの選択モデル。 ComboBoxでは、単一選択のみがサポートされています。
      • getSelectionModel

        public final SingleSelectionModel<T> getSelectionModel​()
        プロパティselectionModelの値を取得します。
        プロパティの説明:
        ComboBoxの選択モデル。 ComboBoxでは、単一選択のみがサポートされています。
      • setVisibleRowCount

        public final void setVisibleRowCount​(int value)
        プロパティvisibleRowCountの値を設定します。
        プロパティの説明:
        ComboBoxポップアップが表示されているときに、ポップアップ内に表示される行の最大数。 デフォルトでは、この値は10ですが、これを変更してポップアップの高さを増減できます。
      • getVisibleRowCount

        public final int getVisibleRowCount​()
        プロパティvisibleRowCountの値を取得します。
        プロパティの説明:
        ComboBoxポップアップが表示されているときに、ポップアップ内に表示される行の最大数。 デフォルトでは、この値は10ですが、これを変更してポップアップの高さを増減できます。
      • visibleRowCountProperty

        public final IntegerProperty visibleRowCountProperty​()
        ComboBoxポップアップが表示されているときに、ポップアップ内に表示される行の最大数。 デフォルトでは、この値は10ですが、これを変更してポップアップの高さを増減できます。
        関連項目:
        getVisibleRowCount()setVisibleRowCount(int)
      • getEditor

        public final TextField getEditor​()
        プロパティ・エディタの値を取得します。
        プロパティの説明:
        ComboBoxのエディタ。 ComboBoxがeditableでない場合、editorはnullです。
        導入されたバージョン:
        JavaFX 2.2
      • placeholderProperty

        public final ObjectProperty<Node> placeholderProperty​()
        表示するコンテンツがComboBoxにない場合は、このノードがユーザーに表示されます。 アイテム・リストがnullまたは空の場合、placeholderノードはComboBoxポップアップ領域に表示されます。
        導入されたバージョン:
        JavaFX 8.0
        関連項目:
        getPlaceholder()setPlaceholder(Node)
      • setPlaceholder

        public final void setPlaceholder​(Node value)
        プロパティ・プレースホルダの値を設定します。
        プロパティの説明:
        表示するコンテンツがComboBoxにない場合は、このノードがユーザーに表示されます。 アイテム・リストがnullまたは空の場合、placeholderノードはComboBoxポップアップ領域に表示されます。
        導入されたバージョン:
        JavaFX 8.0
      • getPlaceholder

        public final Node getPlaceholder​()
        プロパティ・プレースホルダの値を取得します。
        プロパティの説明:
        表示するコンテンツがComboBoxにない場合は、このノードがユーザーに表示されます。 アイテム・リストがnullまたは空の場合、placeholderノードはComboBoxポップアップ領域に表示されます。
        導入されたバージョン:
        JavaFX 8.0
      • createDefaultSkin

        protected Skin<?> createDefaultSkin​()
        このコントロールのデフォルト・スキンの新しいインスタンスを作成します。 これは、CSS -fx-skinを介してスキンが提供されていない場合にコントロール用のスキンを作成するために、または setSkin(...)を使用してサブクラスで明示的に設定するために呼び出されます。
        オーバーライド:
        createDefaultSkin 、クラス: Control
        戻り値:
        このコントロールのデフォルト・スキンの新しいインスタンス。 nullの場合、コントロールにはスキンがありません(Cssで提供されている場合を除く)。
      • commitValue

        public final void commitValue​()
        ComboBoxがeditableの場合、このメソッドを呼び出すと、現在のテキストがコミットされ、valueに変換されます。
        導入されたバージョン:
        9
      • cancelEdit

        public final void cancelEdit​()
        ComboBoxがeditableの場合、このメソッドを呼び出すと、エディタのテキストを最後にコミットされたvalueに置き換えようとします。
        導入されたバージョン:
        9
      • queryAccessibleAttribute

        public Object queryAccessibleAttribute​(AccessibleAttribute attribute,
                                               Object... parameters)
        このメソッドは、属性の値をリクエストするためにアシスティブ・テクノロジによって呼び出されます。

        このメソッドは一般に、特定の役割に必要な属性を実装するためにサブクラスによってオーバーライドされます。
        特定の属性が処理されない場合は、スーパークラスの実装を呼び出す必要があります。

        オーバーライド:
        queryAccessibleAttribute in class ComboBoxBase<T>
        パラメータ:
        attribute - リクエストされた属性
        parameters - オプションのパラメータ・リスト
        戻り値:
        リクエストされた属性の値
        関連項目:
        AccessibleAttribute