【问题标题】:adding elements from string array into defaultlistmodel将字符串数组中的元素添加到 defaultlistmodel
【发布时间】:2016-07-28 05:06:25
【问题描述】:

我正在尝试通过删除联系人来更新 JList,但它并没有像我想要的那样更新 JList。

最初,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 以获取联系人。此方法在控制器类中。我希望这能说明我遇到问题的原因。

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();
}

【问题讨论】:

    标签: java arrays jlist defaultlistmodel


    【解决方案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;
    }
    

    【讨论】:

    • 如果我已经这样做了,我该如何修改我在这篇文章中的现有代码?还是我不需要?
    • 您需要更改您的 getContact 方法以返回类型 Contact 并返回联系人数组。您还需要更改您的 DefaultListModel 我猜...您可以发布您的 Contact() 课程吗?这将非常有帮助......
    • 好的,我将编辑我的答案:D 请更新您的答案并添加您的联系人类别...
    • 我根据你的更新了我的答案,结果它没有访问联系人类。我包括它,我得到了一个新的错误。不兼容的类型:String[] 无法转换为 Contact[] [javac] contactList = controller.getContacts();
    • 我猜你忘记了 getContacts() 方法的返回类型:public Contact[] getContacts()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2013-01-28
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多