Управление ComboBox имеет метод под названием setOnAction. Этот метод принимает в EventHandler, что называется, как описано в документации:Как заставить ComboBox EventHandler запускаться при программном выборе элементов?
The ComboBox действие, которое вызывается всякий раз, когда значение ComboBox свойства изменяется. Это может быть связано с тем, что значение value имеет значение , когда пользователь выбирает элемент во всплывающем списке или диалоговом окне , или, в случае редактируемых ComboBox, может быть, когда пользователь предоставляет свой собственный вход (это через TextField или какой-то другой механизм ввода.
При первой стадии нагрузка, я не хочу, чтобы ComboBox по умолчанию пустого значения, я хочу, чтобы автоматически выбрать первый вариант в ComboBox (если он имеет один). Методы getSelectionModel(). selectFirst() изменяет выбор ComboBox, но по какой-то причине не вызывает EventHandler. Однако EventHandler для кнопки, которая вызывает точные методы : вызывает событие EventHandler. Что я делаю не так?
Вот краткий тест, который показывает это поведение с помощью JDK 8u40:
import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
public class Test extends Application {
public void start(Stage stage) throws Exception {
HBox pane = new HBox();
ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().add("Hello");
comboBox.getItems().add("World");
comboBox.setOnAction((e) -> {
System.out.println(comboBox.getSelectionModel().getSelectedItem());
});
Button button = new Button("Select First");
button.setOnAction((e) -> {
comboBox.getSelectionModel().selectFirst();
});
comboBox.getSelectionModel().selectFirst();
pane.getChildren().add(comboBox);
pane.getChildren().add(button);
Scene scene = new Scene(pane);
stage.setScene(scene);
stage.show();
}
}
Вы также можете зарегистрировать прослушиватель с помощью 'valueProperty()'. Этот слушатель будет уведомлен, когда значение изменится (независимо от того, как оно изменяется) –