2015-03-30 53 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