JavaFX: Как установить текст ComboBoxes и ToggleButtons в цикле? - PullRequest
0 голосов
/ 14 октября 2018

У меня есть приложение JavaFX с большим количеством ToggleButtons, ComboBoxes и TextFields, организованных в списки по их типам.У меня также есть JSON-файл со списком объектов класса моего члена.

Конечно, у меня есть кнопки @FXML для кнопок и т. Д.

Когда я запускаю свое приложение, я хочу установить для всех ToggleButtonопределенный текст, который я подготовил в файле JSON для конкретного члена.Я планировал сделать это с помощью метода initialize () для вызова моего метода fillToggleButtons ():

List<Member> membersFromJSON = new ArrayList<>();
List<ToggleButton> sendToTeamMembers = new ArrayList<>();

private void fillToggleButtons() {

    Reader reader = null;
    try {
        reader = new FileReader(JSONFilePaths.membersJSONFilePath);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Gson gson = new Gson();
    Type memberList = new TypeToken<ArrayList<Member>>() {}.getType();
    List<Member> members = gson.fromJson(reader, memberList);

    for (int i = 0; i < sendToTeamMembers.size(); i++) {
        for (int k = 0; k < members.size(); k++) {
                sendToTeamMembers.get(i).setText(members.get(k).getName());
        }
    }
}

Но когда я это делаю, мои циклы не работают.У меня один и тот же текст для всех ToggleButton, но в файле JSON они разные.Нужен ли ObservableList здесь вместо стандартного списка Java?

Тот же вопрос для ComboBoxes (я знаю, что должен использовать индекс, также у меня он есть в том же файле JSON, что и идентификатор / индекс члена).

Что я должен сделать для набора текста в цикледля объектов JavaFX?

1 Ответ

0 голосов
/ 14 октября 2018

Ваша логика цикла неверна - вы устанавливаете каждый текст ToggleButton несколько раз (сначала members.get(0).getName(), затем members.get(1).getName() и т. Д.).В конце концов, для каждого ToggleButton будет установлено имя последнего члена из списка.

Вам нужен только один цикл for:

for (int i = 0; i < sendToTeamMembers.size(); i++) {
    sendToTeamMembers.get(i).setText(members.get(i).getName());
}

Убедитесь, чточтобы проверить, содержит ли список members хотя бы один элемент sendToTeamMembers.size(), прежде чем вызывать приведенный выше код, а если нет, возможно, возникла какая-то ошибка при загрузке / разборе файла JSON, которую необходимо исправить в первую очередь.

...