JavaFX获取使用observableArrayList填充的组合框的值

我正在使用observableArrayList填充ComboBox,如下所示:

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;
    }

});

我在Envs类中有一个重写的toString方法,因为在选择值后,我的组合框未显示正确的名称(如Name1或Name2)。而是显示对象的十六进制值。现在,如何检索Env的“值”部分?如果我使用env1Field.getvalue()方法,它给我的是“名称”而不是“值”。我需要将“值”部分传递给另一种方法。

P.S:我尝试覆盖 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的“值”?

Jason82918 回答:JavaFX获取使用observableArrayList填充的组合框的值

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3167620.html

大家都在问