我正在使用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
的“值”?