gpt4 book ai didi

java - DefaultListModel.addElement() 不更新 JList

转载 作者:行者123 更新时间:2023-12-01 10:09:03 26 4
gpt4 key购买 nike

我在 Java 项目中使用 Firebase,我添加了一个监听器来查询数据,然后将元素添加到 DefaultListModel,但 JList 仅删除旧项目并且不显示新数据。
我的JList

usersData = new DefaultListModel<>();
JList<String> users = new JList<>(usersData);
users.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
users.setSelectedIndex(0);
users.setVisibleRowCount(5);
JScrollPane fruitListScrollPane = new JScrollPane(users);
add(fruitListScrollPane, BorderLayout.SOUTH);

和我的 Firebase 值监听器

firebaseRef.addListenerForSingleValueEvent(new ValueEventListener() {

@Override
public void onDataChange(DataSnapshot snapshot) {
// remove all old elements from DefaultListModel
usersData.removeAllElements();
// get the data from snapshot
for (DataSnapshot userSnapshot : snapshot.getChildren()) {
User user = userSnapshot.getValue(User.class);
String userInfo = "Username: " + user.getUsername() + " & Password: " + user.getPassword();
// add the info to the model
usersData.addElement(userInfo);
// print the info
System.out.println(userInfo);
}
}

@Override
public void onCancelled(FirebaseError error) {
}
});

最佳答案

问题是我的列表器的 oonDataChange() 在线程中运行,因此我使用此代码来执行我需要的操作。我将数据列表发送到此方法,然后开始将它们一一添加。

public void addElements(final List<String> data) {
if (SwingUtilities.isEventDispatchThread())
return;
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
for (String item : data) {
usersData.addElement(item);
System.out.println(item);
}
}
});
}

感谢 Refreshing GUI by another thread in java (swing)

关于java - DefaultListModel.addElement() 不更新 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266491/

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