У меня есть этот код в методе запуска:ComboBox странное поведение (JavaFX 8)
ObservableList<StringBuilder> list = FXCollections.observableArrayList();
list.add(new StringBuilder("0"));
list.add(new StringBuilder("1"));
list.add(new StringBuilder("2"));
list.add(new StringBuilder("3"));
list.add(new StringBuilder("4"));
list.add(new StringBuilder("5"));
list.add(new StringBuilder("6"));
list.add(new StringBuilder("7"));
list.add(new StringBuilder("8"));
list.add(new StringBuilder("9"));
ComboBox<StringBuilder> combo = new ComboBox<>(list);
Button change = new Button("change");
change.setOnAction((event) -> {
list.set(5, new StringBuilder("-"));
});
BorderPane borderPane = new BorderPane(combo, null, null, change, null);
Scene scene = new Scene(borderPane);
primaryStage.setScene(scene);
primaryStage.show();
я начинаю свою программу и выбрать второй пункт, а затем я нажимаю на «изменение» кнопку несколько раз. Ничего не происходит, и это хорошо. Но если я выберу пункт «6» и нажму кнопку «изменить», то comboBox автоматически выбирает следующий элемент («7»). Почему это происходит?
Тогда мы можем изменить строку
list.set(5, new StringBuilder("-");
на
list.remove(5);
Затем, если выбрать пункт "2" и нажмите кнопку "изменить", то ничего не происходит. И снова, если я выберу пункт «9» и нажмите кнопку «изменить», тогда comboBox автоматически выбирает предыдущий элемент («8»).
Я ожидаю, что если я просто изменю элемент, то есть используйте метод набора списка, тогда comboBox не изменит выбор. Как справиться с этим?