2016-07-28 108 views
0

我试图通过删除一个联系人来更新JList,而不是像我想要的那样更新JL​​ist。将字符串数组中的元素添加到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(); 
} 

回答

1

我想你可以通过覆盖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; 
} 
+0

如果我已经做到了,我该如何修改现有的代码,我在这个岗位?或者我不需要? – whuang

+0

您需要将getContact方法更改为返回类型Contact并返回联系人数组。你也需要改变你的DefaultListModel我猜... 你可以发布你的Contact()类吗?这将是极其有益的... –

+0

好的,我会编辑我的答案:D 请更新您的答案并添加您的联系人类... –