这是两次调用的代码:
public static DefaultListModel getFriends(int nameOrUser) {
try {
Friend[] allFriends = Skype.getContactList().getAllFriends();
System.out.println("Skype contact list lenght: " + allFriends.length);
for (Friend friend : allFriends) {
String fullName = friend.getFullName();
String userName = friend.toString();
if (fullName.isEmpty()) {
fullName = friend.getId();
}
fullListModel.addElement(fullName);
userListModel.addElement(userName);
}
} catch (SkypeException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
}
if (nameOrUser == 0) {
return fullListModel;
} else if (nameOrUser == 1) {
return userListModel;
} else {
System.out.println("You must specify a valid data type.");
}
return null;
}
问题在于,当我将其分配给jList时,jList包含两次联系人列表:/
希望我解释得很好,对不起,如果我的英语不好。
编辑:
这是调用代码:
fullList.setModel(Utils.getFriends(0));
答案 0 :(得分:1)
您编写的方法getFriends()
似乎有两种相互矛盾的方式:
ListModel
之一(即可能多次,在您的具体情况下,可能至少2次),就会被调用这部分是因为它做了两件不同的事情:
ListModel
s ListModel
s 您可以通过将这两个事物分成不同的方法来解决您的问题,例如:
public static void populateFriends() {
// ... add the friends into the list model ...
}
public static DefaultListModel getFriends(int nameOrUser) {
if (nameOrUser == 0) {
return fullListModel;
} else if (nameOrUser == 1) {
return userListModel;
} else {
// ...
}
如果您想将好友添加到ListModel
,请致电populateFriends()
。如果您想获得ListModel
引用,请致电getFriends()
。
另外,我建议在添加朋友之前让populateFriends()
清除ListModel
s(使用.clear()
)。通过这种方式,您可以多次调用它,并且每次刷新列表,而不是复制它们。