JavaFX:如何在循环中设置组合框和切换按钮的文本?
JavaFX: How to setText of ComboBoxes and ToggleButtons in loop?
我有一个 JavaFX 应用程序,其中包含许多按类型组织在列表中的 ToggleButton、ComboBox 和 TextField。我还有一个 JSON 文件,其中包含我的会员 class 对象的列表。
当然我有一个用于按钮等的@FXML adnotations buttons
当我的应用程序启动时,我想为每个人设置 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 的相同问题(我知道我应该使用索引,而且我在与成员 ID/index 相同的 JSON 文件中也有它)。
我应该如何为 JavaFX 对象设置循环中的文本?
您的循环逻辑是错误的 - 您多次设置每个 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()
个元素 - 如果没有,则 loading/parsing 您的 loading/parsing 可能存在一些错误JSON
您需要首先修复的文件。
我有一个 JavaFX 应用程序,其中包含许多按类型组织在列表中的 ToggleButton、ComboBox 和 TextField。我还有一个 JSON 文件,其中包含我的会员 class 对象的列表。
当然我有一个用于按钮等的@FXML adnotations buttons
当我的应用程序启动时,我想为每个人设置 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 的相同问题(我知道我应该使用索引,而且我在与成员 ID/index 相同的 JSON 文件中也有它)。
我应该如何为 JavaFX 对象设置循环中的文本?
您的循环逻辑是错误的 - 您多次设置每个 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()
个元素 - 如果没有,则 loading/parsing 您的 loading/parsing 可能存在一些错误JSON
您需要首先修复的文件。