Я заполняю ComboBox с помощью observableArrayList следующим образом:
class Envs{
String name;
String value;
Envs(String n, String v){
name = n;
value = v;
}
public String getVal(){
return value;
}
public String getName(){
return name;
}
@Override
public String toString() {
return name;
}
}
ObservableList<Envs> envList =
FXCollections.observableArrayList(
new Envs("Name1", "Value1"),
new Envs("Name2","Value2")
);
final ComboBox env1Field = new ComboBox(envList);
env1Field.setCellFactory(new Callback<ListView<Envs>,ListCell<Envs>>() {
@Override
public ListCell<Envs> call(ListView<Envs> param) {
final ListCell<Envs> cell = new ListCell<Envs>(){
@Override
protected void updateItem(Envs t, boolean bln) {
super.updateItem(t, bln);
if(t != null){
setText(t.getName());
}else{
setText(null);
}
}
};
return cell;
}
});
У меня был переопределенный метод toString в классе Envs, так как мой Combobox не показывает правильное имя (как Name1 или Name2) после значениявыбран. Вместо этого он показывал значения объекта HEX. Теперь, как я могу получить «значение» части Env? Если я использую env1Field.getValue()
метод, он дает мне «имя» вместо «значение». Мне нужно передать часть «значение» другому методу.
PS: Я попытался переопределить метод changed
и присвоил новое значение статической переменной ENV1
следующим образом:
env1Field.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Envs>() {
@Override
public void changed(ObservableValue<? extends Envs> observable, Envs oldValue, Envs newValue) {
if (newValue != null){
ENV1 = newValue.value;
}
}
});
И я могу использовать значение ENV1
. Но почему-то это не так. Как я могу получить "значение" env1Field
?