2015-03-30 2 views
0

Я делаю проект, где мне нужно заполнить ComboBox атрибутами из объектов, которые пользователь только что сохранил в Hashmap раньше. Это означает, что я не могу заранее назначить элементы в ComboBox. Это первый раз, когда я пытаюсь использовать javaFX. Пока это было нормально, но когда я пытаюсь заполнить ComboBox «loggedOnUsersDropDown», ничего не происходит. Он просто остается пустым. Я создал пользовательский интерфейс, включая ComboBox со сценарным застройщиком. Код метода выглядит так:Не удалось заполнить JavaFX ComboBox во время выполнения

@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

Вы создаете новый комбинированный блок. Вы когда-нибудь добавляли новый в график сцены? –

+0

Нет, я не. Я думал, что javafx обрабатывает это для меня, поскольку combobox был создан в сцене. Спасибо за подсказку. Кажется, я не могу добавить combobox ко всему, например строку «root.getChildren(). Add (loggenOnUsersDropDown)» не работает. Есть ли какие-либо подсказки о том, как правильно добавить поле со списком? спасибо – Boldan

+0

Зачем создавать новый комбинированный блок? –

ответ

0

Вы создаете новый ComboBox и заселяете его. То, что ComboBox не является частью графика сцены, поэтому вы не видите результат его заполнения.

@FXML Предполагая, что инъекции установлены правильно, вы должны быть в состоянии только удалить строку

loggedOnUsersDropDown = new ComboBox<String>(); 

и он будет работать правильно.

+0

Я пробовал это. По какой-то причине я получаю NullPointerExeption. Я предполагаю, что что-то не так с инъекцией @FXML. Кроме того, сценарий Builder, похоже, не распознает поле ввода. Но, как я уже сказал, все остальное работает отлично. Большое спасибо за вашу помощь;) – Boldan

+0

Так что отредактируйте свой вопрос, чтобы включить соответствующие части файла FXML (определение поля со списком) и объявление поля со списком в контроллере. –

Смежные вопросы