2013-07-02 113 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個可觀察的列表,項目和過濾我不得不如果其他人做了這個。運行良好,當我測試它時,我會看到它是否給我帶來任何錯誤。