ChoiceBox в JavaFX - заголовок по умолчанию - PullRequest
1 голос
/ 19 марта 2020

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

Вот код, который я использовал:

ChoiceBox<String> choiceBox = new ChoiceBox<String>();
choiceBox.getItems().addAll("How old are you?", "10-20", "20-30", "30-40");
choiceBox.setId("choiceBox");
choiceBox.getSelectionModel().select(0);

И вот результат:

The result of the code

В документации я нашел это, но я не мог понять, как указать, что выбранный элемент должен быть чем-то, чего нет в опциях list

ChoiceBox (JavaFX 11)

По умолчанию ChoiceBox не имеет выбранного элемента, если не указано иное. Хотя ChoiceBox позволяет пользователю выбирать только из предопределенного списка, разработчик может указать, что выбранный элемент является чем-то отличным от того, что доступно в предопределенном списке . Это требуется для нескольких важных случаев использования.

1 Ответ

2 голосов
/ 19 марта 2020

ChoiceBoxSkin<T> показывает значение выбранного элемента в Label. К сожалению, этот ярлык является частным. Если у вас есть причина не использовать ComboBox<T>, вот обходной путь:

ChoiceBox<String> choiceBox = new ChoiceBox<>();
choiceBox.getItems().addAll("10-20", "20-30", "30-40");
Platform.runLater(() -> {
    SkinBase<ChoiceBox<String>> skin = (SkinBase<ChoiceBox<String>>) choiceBox.getSkin();
    // children contain only "Label label" and "StackPane openButton"
    for (Node child : skin.getChildren()) {
        if (child instanceof Label) {
            Label label = (Label) child;
            if (label.getText().isEmpty()) {
                label.setText("How old are you?");
            }
            return;
        }
    }
});

Результат:

Result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...