gpt4 book ai didi

Java 从 UserList 和 setItems ComboBox 获取用户名

转载 作者:行者123 更新时间:2023-12-02 11:31:28 25 4
gpt4 key购买 nike

我有这个:

@FXML
private ChoiceBox<String> choiseData;

ObservableList<String> choiseUserList = FXCollections.observableArrayList();
ObservableList<User> userList = FXCollections.observableArrayList();
AdminSQL sql = new AdminSQL();
userList = sql.getAllUser();

for (User u : userList)
choiseUserList.add(u.getUserLogin());
choiseData.setItems(choiseUserList);

我不喜欢两个列表和循环。我想知道是否只能直接从userList列表中下载用户的登录信息并将其放置在ChoiseBox

类(class)用户:

private IntegerProperty userLp;
private StringProperty userLogin;
private StringProperty userRule;

最佳答案

很可能,您不希望将 ChoiceBox 项目作为从真实项目映射一次(以某种方式)的列表,因为这样做会带来一些缺点:

  • 这两个列表很容易不同步:当用户更改或其任何属性时,ChoiceBox 不会更新
  • 听 f.i. 时ChoiceBox 中的选择发生更改,监听器没有有关用户的完整信息(来自 selectedItem),而只有其属性值之一 - 如果它想对用户执行操作,则必须在某处查找信息否则,从而引入(不需要的)耦合
  • 您正在与 fx 的风作斗争,fx 专门支持配置任何数据对象的视觉表示 - 对于 ChoiceBox,您需要一个 StringConverter

示例代码片段:

ChoiceBox<User> choiceBox =  new ChoiceBox<>(getUsers()); 
// from your snippet, AdminSQL already returns the list as
// an ObservableList, so you can set it directly as provided
// new ChoiceBox<>(sql.getAllUsers());
StringConverter<User> converter = new StringConverter<>() {

@Override
public String toString(User user) {
return user != null ? user.getUserLogin() : "";
}

@Override
public User fromString(String userLogin) {
// should never happen, choicebox is not editable
throw new UnsupportedOperationException("back conversion not supported from " + userLogin);
}

};
choiceBox.setConverter(converter);

关于Java 从 UserList 和 setItems ComboBox 获取用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49271999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com