JavaFX:使用Object属性的ComboBox

让我们说我有一节课:

public class Dummy { private String name; private String someOtherProperty; public String getName() { return name; } } 

我有这个类ArrayList dummyList;

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

伪代码:

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

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

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

 ComboBox comboBox = ... Callback, ListCell> factory = lv -> new ListCell() { @Override protected void updateItem(Dummy item, boolean empty) { super.updateItem(item, empty); setText(empty ? "" : item.getName()); } }; comboBox.setCellFactory(factory); comboBox.setButtonCell(factory.call(null)); 

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

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