JavaFX получает значение поля со списком, заполненного с помощью observableArrayList - PullRequest
0 голосов
/ 04 ноября 2019

Я заполняю 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...