通过调用 firedatachanged 正确更新 Jlist
Correctly updating Jlist by calling firedatachanged
所以我需要动态更新jList。我读到我必须使用 fireData.... 或类似的东西,具体取决于 api.
我在以下代码中为 jList 使用 AbstractListModel。
/*private javax.swing.JList<String> anycast_users;*/
void set_user_model(){
anycast_users.setModel(new javax.swing.AbstractListModel<String>() {
@Override
public int getSize() {
return anycast_users_num;
}
@Override
public String getElementAt(int i) {
return anycast_users_list[i];
}
});
/*listeners and other init..*/
AbstractListNode 有这个功能
protected void fireContentsChanged(Object source,
int index0,
int index1)
所以,要更新我最初尝试的列表
anycast_users.getModel(). //in a different function (updateList())
但是由于 fireContentsChanged 受到保护,我无法从这里调用它。
那么,如何正确调用该函数,需要做哪些额外的改动呢?
我会在 class 中创建一个方法,您可以在其中访问模型并制作如下内容:
public ListModel<String> getAnycastUsersModel() {
return this.anycast_users.getModel();
}
这样您就可以随时随地访问它。
如果可以的话,我建议您使用 DefaultListModel :)
我将采用 MadProgrammer 建议的解决方案。
class anycastModel extends javax.swing.AbstractListModel<String>{
@Override
public int getSize() {
return anycast_users_num;
}
@Override
public String getElementAt(int i) {
return anycast_users_list[i];
}
public void updateList(){
fireContentsChanged(this, 0, anycast_users_num);
}
}
void set_usermodel(){
anycast_model=new anycastModel();
anycast_users.setModel(anycast_model);
}
待更新
anycast_model.updateList();
所以我需要动态更新jList。我读到我必须使用 fireData.... 或类似的东西,具体取决于 api.
我在以下代码中为 jList 使用 AbstractListModel。
/*private javax.swing.JList<String> anycast_users;*/
void set_user_model(){
anycast_users.setModel(new javax.swing.AbstractListModel<String>() {
@Override
public int getSize() {
return anycast_users_num;
}
@Override
public String getElementAt(int i) {
return anycast_users_list[i];
}
});
/*listeners and other init..*/
AbstractListNode 有这个功能
protected void fireContentsChanged(Object source,
int index0,
int index1)
所以,要更新我最初尝试的列表
anycast_users.getModel(). //in a different function (updateList())
但是由于 fireContentsChanged 受到保护,我无法从这里调用它。 那么,如何正确调用该函数,需要做哪些额外的改动呢?
我会在 class 中创建一个方法,您可以在其中访问模型并制作如下内容:
public ListModel<String> getAnycastUsersModel() {
return this.anycast_users.getModel();
}
这样您就可以随时随地访问它。 如果可以的话,我建议您使用 DefaultListModel :)
我将采用 MadProgrammer 建议的解决方案。
class anycastModel extends javax.swing.AbstractListModel<String>{
@Override
public int getSize() {
return anycast_users_num;
}
@Override
public String getElementAt(int i) {
return anycast_users_list[i];
}
public void updateList(){
fireContentsChanged(this, 0, anycast_users_num);
}
}
void set_usermodel(){
anycast_model=new anycastModel();
anycast_users.setModel(anycast_model);
}
待更新
anycast_model.updateList();