it-swarm.com.ru

JavaFX и FXML: как установить выбранный по умолчанию элемент в ChoiceBox в FXML?

У меня есть следующий 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>

Но в графическом интерфейсе он просто показывает ChoiceBox со значением по умолчанию ничего. Я хотел бы, чтобы первый элемент в списке был по умолчанию, и выбор "ноль" или ничего нельзя было запретить.

Как мне это сделать?

9
jononomo

Я добавил атрибут value в тег ChoiceBox, и это сработало.

<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>
11
jononomo

@Groostav: Если мы программно "знаем" значение, которое должно отображаться как выбранное (например, мы попали в форму редактирования), мы можем сделать следующее:

1) Добавьте новый элемент с индексом 0 (то есть элемент, который мы должны показать как выбранный):

myChoiceBox.getItems().add(0, ItemObtainedProgrammatically);

2) Показать элемент как выбранный (так как мы уже знаем, что он в позиции 0):

myChoiceBox.getSelectionModel().select(0);

Вероятно, это квалифицируется как грязный хак, но это работает. Против: у вас есть один и тот же предмет дважды в вашем поле выбора

0
Juan Carlos

Во-первых, вы должны импортировать нужную модель значений, как в ответе Кроуэлла, вы должны импортировать так в своем заголовке 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