Я пытаюсь обновить текст в выпадающем списке при изменении элемента без повторной инициализации элемента или элемента.
Есть ли способ привязать текст элемента к отображаемому тексту? Даже если я использую Property
, кажется, что StringConverter игнорирует его, что понятно, но мне интересно, есть ли способ сделать привязку без повторной инициализации элемента. Вот сольион повторной инициализации: JavaFx: текст редактора ComboBox , которого я хочу избежать.
Вот простой код, который вы можете проверить:
public class MainStageController implements Initializable {
@FXML
private ComboBox<Hero> comboBox;
@FXML
private Button lvlUp;
@Override
public void initialize(URL location, ResourceBundle resources) {
comboBox.setConverter(new StringConverter<Hero>() {
@Override
public String toString(Hero hero) {
return hero.getName() + " - Level: " + hero.getLevel();
}
@Override
public Hero fromString(String string) {
return null;
}
});
lvlUp.setOnAction(event -> {
Hero value = comboBox.getValue();
value.levelProperty().setValue(value.getLevel() + 1);
});
Hero weakHero = new Hero("Ted", 1);
Hero averageHero = new Hero("Zed", 10);
Hero strongHero = new Hero("Med", 25);
lvlUp.disableProperty().bind(comboBox.valueProperty().isNull());
comboBox.setItems(FXCollections.observableArrayList(weakHero, averageHero, strongHero));
}
private static class Hero {
private String name;
private IntegerProperty level;
public Hero(String name, Integer level) {
this.name = name;
this.level = new SimpleIntegerProperty(level);
}
private String getName() {
return name;
}
private int getLevel() {
return level.get();
}
public IntegerProperty levelProperty() {
return level;
}
}
}
Что Я хочу: Когда я нажимаю Уровень вверх , обновите текст как в отображаемом тексте, так и в раскрывающемся списке.
Возможно ли это?