private void initialize() {
    loadPersistenceContext();

    List<Events> events = getEventsChoiceBox(getPersistenceContext());
    ObservableList<Event> data = FXCollections.observableList(events);

    cbEvent.setItems(data); // Inserting data into the ChoiceBox
}

这是我的主要代码。问题是加载表单时,我将对象插入到ChoiceBox中,而不是属性中。

这是我的列表事件的内容
Object[]
|- String
|- Integer
Object[]
|- String
|- Integer

因此,我想显示一个带有String属性的ChoiceBox,并将Integer映射到我的控制器。

我尝试了很多事情,但无法解决。

最佳答案

请参见JavaFX ChoiceBox control backed by Database IDs的示例。

该示例通过定义一个Choice类来工作,该类由数据库行ID和要在Choice框中显示的项目的字符串表示组成。 Choice的默认toString方法被自定义实现覆盖,该实现返回要显示的项目的字符串表示形式,而不是数据库ID。当您将选项添加到ChoiceBox时,ChoiceBox会将每个Choice转换为要显示的字符串。 Choice的显示字符串值仅是Choice文本,而不包括数据库ID或使用Choice的默认toString(将仅显示无意义的对象引用)。

choicebox示例应用程序的输出:

还应考虑将ComboBox用于这种实现,因为它内置了一种机制,可以从节点的显示中抽象出节点的值(通过CellFactory)。但是,ComboBox的使用通常比ChoiceBox更为复杂。

08-15 14:48