JavaFX:使用Object属性

时间:2016-12-17 17:10:43

标签: java arraylist javafx combobox

让我说我有一个班级:

public class Dummy {
    private String name;
    private String someOtherProperty;

    public String getName() {
       return name;
    }
}

我有一个此类ArrayList<Dummy> dummyList;

的ArrayList

我是否可以创建一个带有Object name属性作为选择选项的JavaFX ComboBox,而无需使用对象名称创建新的ArrayList<String>

伪代码:

ObservableList<Dummy> dummyO = FXCollections.observableArrayList(dummyList);
final ComboBox combo = new ComboBox(dummyO); // -> here dummyO.name?

(可选)理想情况下,虽然应该显示名称,但是当选择了一个选项时,combo.getValue()应该返回所选Dummy的引用,而不仅仅是名称。这可能吗?

2 个答案:

答案 0 :(得分:7)

您可以使用自定义cellFactory以适合您需要的方式显示项目:

ComboBox<Dummy> comboBox = ...

Callback<ListView<Dummy>, ListCell<Dummy>> factory = lv -> new ListCell<Dummy>() {

    @Override
    protected void updateItem(Dummy item, boolean empty) {
        super.updateItem(item, empty);
        setText(empty ? "" : item.getName());
    }

};

comboBox.setCellFactory(factory);
comboBox.setButtonCell(factory.call(null));

答案 1 :(得分:-1)

我假设您所指的ComboBox是:http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ComboBoxBase.html。由于getValue()public,您可以执行以下操作:

public class MyComboBox<T> extends ComboBox<T> {
  private final Dummy dummy;
  public MyComboBox(Dummy dummy) {
    this.dummy = dummy;
  }
  public T getValue() {
    return dummy.getName();
  }
}