2015-03-30 52 views
0

我正在做一個項目,我必須使用用戶剛存儲在Hashmap中的對象的屬性填充組合框。這意味着我無法提前將項目分配給組合框。這是我第一次嘗試使用javaFX。到目前爲止它沒問題,但是當我嘗試填充組合框「loggedOnUsersDropDown」時,沒有任何反應。它只是空着。我創建了包含帶場景構建器的ComboBox的UI。該方法的代碼如下所示:無法在運行時填充JavaFX組合框

@FXML 
protected void loadLoggedOn(){ 
    ArrayList<String> loggedOn = new ArrayList(); 

    for (User LOGGED_Onkey : bd.currentSSO.LOGGED_ON.keySet()) { 
     loggedOn.add(LOGGED_Onkey.getAttribute(LOGGED_Onkey.USER_NAME));   //System.out.println(LOGGED_Onkey.getAttribute(LOGGED_Onkey.USER_NAME)); 
    } 

    ObservableList<String> obList = FXCollections.observableArrayList(loggedOn); 
    //loggedOnUsersDropDown.getItems().clear(); 
    loggedOnUsersDropDown = new ComboBox<String>(); 
    loggedOnUsersDropDown.getItems().addAll(obList); 
    System.out.println(loggedOn.size()); 
} 

我將不勝感激任何答案。如果我忘記了一些重要信息,請提前致謝。

+0

您正在創建一個新的組合框。你有沒有添加新的場景圖? – 2015-03-30 22:10:03

+0

不,我不。我以爲javafx正在爲我處理這個問題,因爲combobox是在場景構建器中創建的。感謝提示。我似乎無法將組合框添加到任何內容,例如「root.getChildren()。add(loggenOnUsersDropDown)」這一行不起作用,有關如何正確添加組合框的提示?謝謝 – Boldan 2015-03-31 08:35:56

+0

爲什麼要創建一個新的組合框? – 2015-03-31 09:12:47

回答

0

您正在創建一個新的ComboBox並填充它。那ComboBox不是你場景圖的一部分,所以你看不到填充它的結果。

假設@FXML注射設置正確,你應該能夠只是刪除線

loggedOnUsersDropDown = new ComboBox<String>(); 

,它會正常工作。

+0

我試過了。出於某種原因,我得到一個NullPointerExeption。我假設@FXML注入有問題。此外,場景生成器似乎無法識別注入場。但就像我說的,其他一切都是完美的。非常感謝您的幫助;) – Boldan 2015-03-31 13:29:37

+0

因此編輯您的問題以包含FXML文件的相關部分(組合框的定義)以及組合框在控制器中的聲明。 – 2015-03-31 14:26:53