web-dev-qa-db-ja.com

JavaFXとFXML:FXMLのChoiceBoxでデフォルトで選択されたアイテムを設定するにはどうすればよいですか?

私は次のFXMLを持っています:

<ChoiceBox>
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="2 minutes" />
            <String fx:value="5 minutes" />
            <String fx:value="15 minutes" />
        </FXCollections>
    </items>
</ChoiceBox>

ただし、GUIでは、デフォルトが何もないChoiceBoxが表示されるだけです。リストの最初の要素をデフォルトにし、「null」を選択するか、何も禁止しないようにします。

どうすればこれを達成できますか?

13
jononomo

ChoiceBoxタグにvalue属性を追加しましたが、それは機能しました。

<ChoiceBox value="2 minutes">
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="2 minutes" />
            <String fx:value="5 minutes" />
            <String fx:value="15 minutes" />
        </FXCollections>
    </items>
</ChoiceBox>
14
jononomo

@Groostav:選択されたように表示される値をプログラムで「知っている」場合(たとえば、編集フォームにアクセスした場合)、次のことができます。

1)インデックス0の新しいアイテム(つまり、選択済みとして表示する必要のある要素)を追加します。

_myChoiceBox.getItems().add(0, ItemObtainedProgrammatically);
_

2)アイテムを選択済みとして表示します(位置0にあることがすでにわかっているため):

myChoiceBox.getSelectionModel().select(0);

おそらくこれはダーティハックと見なされますが、機能します。短所:選択ボックスに同じアイテムが2回あります

0
Juan Carlos

まず、Crowellの回答のように、必要な値モデルをインポートする必要があります。fxmlヘッダーに次のようにインポートする必要があります。

<?import javafx.collections.*?>

次に、独自のモデルをインポートする場合は、最初にインポートしてから、次のようにします。

<?import com.zzg.mybatis.generator.model.*?>
....

<ChoiceBox layoutX="24.0" layoutY="14.0" prefWidth="150.0">
      <items>
            <FXCollections fx:factory="observableArrayList">
                  <DatabaseDTO name="MySQL" value="1"></DatabaseDTO>
                  <DatabaseDTO name="Oracle" value="2"></DatabaseDTO>
            </FXCollections>
      </items>
</ChoiceBox>
0
astarring