我在我的Java项目中使用Firebase,我已经添加了一个监听器来查询数据,然后将元素添加到DefaultListModel
,但JList
只删除旧项目并且不会#39; t显示新数据。
我的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) {
}
});
答案 0 :(得分:1)
是usersData的正确范围吗?我认为它与你更新内存中的信息有关,而不是你的UI元素。从你给我们的代码中,你不要在JList中分配或刷新信息,只需更新DefaultListModel&lt;&gt;。试试那个
答案 1 :(得分:0)
问题是我的列表管理器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);
}
}
});
}
在一个线程中运行,因此我使用此代码来执行我需要的操作。我将数据列表发送到此方法,然后开始逐个添加它们。
[Dapper.Key]
[Required(ErrorMessage = "This field is requierd")]
[Range(1, int.MaxValue, ErrorMessage ="Only Int")]
public int? Tic_Id { get; set; }
[Required(ErrorMessage = "This field is requierd")]
public DateTime Tic_Date { get; set; }