2013-07-02 62 views
0

这是我的问题。 我有一个名为FilteredComboBox的扩展ComboBox的泛型类。它基本上是一个可编辑的组合框,根据用户输入过滤选择。这个FilteredCombobox是由Book类型的ObservableList提供的,它只是一个简单的类,有2个字段,名称和id(显然它有getter,setters和toString)。从组合框中获取对象

用户做出选择并点击他想从下拉菜单中选择的图书后,我希望通过图书类中名为getBookId的方法来获取此图书标识。不幸的是,当我说bookComboBox.getValue.getBookId时,我得到了强制异常,因为getValue会自动调用toString方法。 有没有办法解决它?我想让getValue()方法返回一个book类型的对象,并从那里调用我的getBookId()。

任何想法?

回答

1

对于像

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

组合得到事件所选择的书的项目(在例如按钮操作事件)

Book selectedBook = combobox.getSelectionModel().getSelectedItem(); 
Integer id = selectedBook.getBookId(); 
+0

不幸的是它给了我同样的错误(在行,其中我说getSelectionModel()getSelectedItem()。): java.lang.ClassCastException:java.lang.String中不能转换为图书 – Damian

+0

@ user2083691显示的代码定义bookComboBox和FilteredComboBox。它应该(通过假设)'FilteredComboBox bookComboBox;'。 –

+0

另外验证'FilteredComboBox 扩展组合框'不只是'ComboBox' –

0

是的,它确实延长组合框 我做他的解决我的问题:

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); 
} 
} 

因为我有2个可观察的列表,项目和过滤我不得不如果其他人做了这个。运行良好,当我测试它时,我会看到它是否给我带来任何错误。