JavaFX:如何在循环中设置ComboBoxes和ToggleButtons的setText?

时间:2018-10-13 21:08:51

标签: json loops javafx combobox togglebutton

我有一个JavaFX应用程序,其中有很多ToggleButtons,ComboBoxes和TextField按类型排列在列表中。我还有一个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 List?

有关ComboBoxes的相同问题(我知道我应该使用索引,而且我将其与会员的ID /索引保存在同一JSON文件中)。

对于JavaFX对象的循环设置文本,我应该怎么做?

1 个答案:

答案 0 :(得分:1)

您的循环逻辑是错误的-您多次设置每个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()个元素-如果不包含,则加载/解析{{1} }文件,您需要先对其进行修复。