Java 从组合框中获取对象

Java 从组合框中获取对象,java,javafx-2,javafx,Java,Javafx 2,Javafx,这是我的问题。 我有一个名为FilteredComboBox的泛型类,它扩展了ComboBox。它基本上是一个可编辑的组合框,根据用户输入过滤选项。这个FilteredCombobox由Book类型的ObservableList提供,它只是一个简单的类,有两个字段,name和id(显然它有getter、setter和toString) 在用户做出选择并从下拉列表中单击他想要的书之后,我希望通过book类中名为getBookId的方法获取该书id。不幸的是,当我说bookComboBox.getV

这是我的问题。 我有一个名为FilteredComboBox的泛型类,它扩展了ComboBox。它基本上是一个可编辑的组合框,根据用户输入过滤选项。这个FilteredCombobox由Book类型的ObservableList提供,它只是一个简单的类,有两个字段,name和id(显然它有getter、setter和toString)

在用户做出选择并从下拉列表中单击他想要的书之后,我希望通过book类中名为getBookId的方法获取该书id。不幸的是,当我说bookComboBox.getValue.getBookId时,我得到了强制转换异常,因为getValue会自动调用toString方法。 有办法绕过它吗?我想让getValue()方法返回book类型的对象,然后从那里调用我的getBookId()

有什么想法吗?

像combo一样

ComboBox<Book> combobox = new ComboBox<>(your_book_list);

是的,它扩展了组合框 我通过做他的工作解决了我的问题:

public T getChosenValue() {
int index = getSelectionModel().getSelectedIndex();
if(filter.size() != 0)
{
       System.out.println("filter size is not 0");
       return filter.get(index);
}
else
{
System.out.println("filter size is 0");
return items.get(index);
}
} 

因为我有两个可观察的列表、项目和筛选,所以我必须这样做。工作正常,我将在测试它时查看它是否没有给我任何错误。

不幸的是,它给了我相同的错误(在我说getSelectionModel().getSelectedItem()的那一行):java.lang.ClassCastException:java.lang.String无法转换为Book@user2083691显示bookComboBox和FilteredComboBox的代码定义。它应该是(根据假设)
FilteredComboBox bookComboBox。还要验证
FilteredComboBox是否扩展了ComboBox
而不仅仅是
ComboBox
public T getChosenValue() {
int index = getSelectionModel().getSelectedIndex();
if(filter.size() != 0)
{
       System.out.println("filter size is not 0");
       return filter.get(index);
}
else
{
System.out.println("filter size is 0");
return items.get(index);
}
}