将字符串数组中的元素添加到defaultlistmodel
问题描述:
我试图通过删除一个联系人来更新JList,而不是像我想要的那样更新JList。将字符串数组中的元素添加到defaultlistmodel
最初,JList看起来像这样。
Broadcast //Not allowed to delete this element
Andy
Bobby
Chris
Brad
假设我已经使用按钮从列表中删除了Andy。它应该显示
Broadcast //Not allowed to delete this element
Bobby
Chris
Brad
相反,它显示在JList上。
contact0
contact2
contact3
contact4
我不知道出了什么问题,我查了很多来源。我希望它返回实际名称,而不是联系人#。代码如下。
private JList<String> listContacts;
private DefaultListModel<String> model;
private String[] contactList;
model = new DefaultListModel<String>();
contactList = controller.getContacts();
for(String contact : contactList){
model.addElement(contact);
}
listContacts = new JList<String>();
listContacts.setModel(model);
class MyButtonListener5 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(listContacts.getSelectedIndex() == 0){
controller.displayMsg("Can't delete broadcast.\n");
}
else if(listContacts.getSelectedIndex() > 0){
controller.displayMsg("You tried to delete " + listContacts.getSelectedValue() +".\n");
model.remove(listContacts.getSelectedIndex());
listContacts.setModel(model);
}
else{
controller.displayMsg("No contact to delete. Please select one.\n");
}
}
}
这是为contactList getContacts。该方法在控制器类中。我希望这能说明我为什么遇到麻烦。
public String[] getContacts(){
Contact[] contacts = new Contact[5];
String[] names = new String[5];
for(int i = 0; i < 5; i++){
contacts[i] = new Contact("contact" + i);
names[i] = contacts[i].getName();
}
return names;
}
这是在我的联系人类中。
private String name;
private String nickname;
public Contact(){
name = "";
nickname = "";
}
public Contact(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
@Override
public String toString(){
return this.getName();
}
答
我想你可以通过覆盖Contact类中的toString()方法来解决这个问题。
@Override
public String toString() {
return this.getName();
}
然后你可以回到你的联系人没有.getName()
而直接将它们添加到列表中。 I recommend you taking a look at this example.
private JList listContacts;
private DefaultListModel model;
private Contact[] contactList;
model = new DefaultListModel();
contactList = controller.getContacts();
for(Contact contact : contactList){
model.addElement(contact);
}
listContacts = new JList();
listContacts.setModel(model);
class MyButtonListener5 implements ActionListener{
public void actionPerformed(ActionEvent e){
if(listContacts.getSelectedIndex() == 0){
controller.displayMsg("Can't delete broadcast.\n");
}
else if(listContacts.getSelectedIndex() > 0){
controller.displayMsg("You tried to delete " + listContacts.getSelectedValue() +".\n");
model.remove(listContacts.getSelectedIndex());
listContacts.setModel(model);
}
else{
controller.displayMsg("No contact to delete. Please select one.\n");
}
}
}
而且你getContacts()方法:
public Contact[] getContacts(){
Contact[] contacts = new Contact[5];
contacts[0] = "Broadcast";
contacts[1] = "Andy";
contacts[2] = "Bobby";
contacts[3] = "Chris";
contacts[4] = "Brad";
return contacts;
}
如果我已经做到了,我该如何修改现有的代码,我在这个岗位?或者我不需要? – whuang
您需要将getContact方法更改为返回类型Contact并返回联系人数组。你也需要改变你的DefaultListModel我猜... 你可以发布你的Contact()类吗?这将是极其有益的... –
好的,我会编辑我的答案:D 请更新您的答案并添加您的联系人类... –