2016-07-28 102 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 請更新您的答案並添加您的聯繫人類... –