Какой ChoiceBox-Event выбрать?

Я поместил ChoiceBox в fxml с помощью JavaFX Scene Builder.

FXML имеет назначенный ему контроллер.

Мой вопрос: какое событие мне нужно зарегистрировать, если я хочу знать об измененных значениях?

onInputMethodTextChanged="#languageSelectionModified"

это не работает со следующим кодом

public void languageSelectionModified(Event event) {
    ChoiceBox<String> box = (ChoiceBox<String>) event.getSource();
    System.out.println(box.getValue());
}

и это работает только для первого клика (т.е. при открытии списка, а не при выборе элемента):

onMouseClicked="#languageSelectionModified"

Хотя Mouse-Events никогда не будет хорошим выбором из-за ситуаций, когда сенсорный экран или клавиатура являются методом ввода, он все же доказывает, что System.out может быть достигнут.

Я совершенно не знаю, где эти вещи задокументированы (в Java-API по умолчанию их нет)


person Gundon    schedule 11.08.2012    source источник


Ответы (2)


Добавьте прослушиватель в поле выбора, введенное @FXML, в вашем контроллере:

choicebox.getSelectionModel().selectedItemProperty().addListener(choiceboxSelectionChangeListener);

Вы также можете привязать к выбранному элементу:

label.textProperty().bind(choicebox.getSelectionModel().selectedItemProperty());

Вот пример подключения прослушивателя в контроллере для ComboBox, определенного в FXML. Логика для ChoiceBox практически идентична.

person jewelsea    schedule 11.08.2012
comment
Спасибо за ваш ответ! Это хорошо работает. Значит, нет способа сделать это через «обычные» FXML-события? Если бы вы могли сказать мне, где я мог бы найти существующие (и определяемые) события для FXML-файлов, я отмечу ваш ответ как ответ на мой вопрос. - person Gundon; 12.08.2012
comment
Нет, вы не можете искать события для этого в FXML, используя JavaFX 2.0–2.2. - person jewelsea; 12.08.2012
comment
Событие модели выбора запускается, даже когда значение поля выбора задается кодом (в моем случае у меня есть один вариант выбора, который заполняет форму дочерних полей выбора), и мне хотелось бы, чтобы был чистый способ отличить изменения, вызванные пользователем, от изменений, управляемых кодом. . - person Mikeb; 28.07.2015

Вы также можете использовать атрибут FXML onAction:

<ChoiceBox onAction="#languageSelectionModified" />
person Saeid Nourian    schedule 28.03.2019