2009-11-27 48 views
0

我想通过从JList中选择一个项目并单击“删除”来从数组列表中删除一个项目。从ArrayList删除Java

我到目前为止的代码,

buttondeleteContact.addActionListener(new ActionListener() {  
    public void actionPerformed(ActionEvent event) { 
    if (contactList.getSelectedIndex() != -1) { 
     people.removeElementAt(contactList.getSelectedIndex()); 
     People.remove(contactList.getSelectedIndex()); 
     System.out.println(People); 
    } 
    }); 

我知道有些事情是不好命名,但人(小写P)是我DefaultListModel和人民(资本P)的名称是名称我数组列表。基本上,我只想从数组中删除一行4行。所以,数组中的位置,以及之后的3。

+0

只是出于好奇,这是一个任务?如果是的话,我个人不介意。这只是我注意到过去几天有关联系人列表,地址簿和图形用户界面的几个问题...... –

+0

您是否删除了一组联系人对象?或者你是否将每个联系人的所有数据存储在数组列表中?如果是这样,请参阅BalusC的答案并尝试封装代码。它会让你的生活更轻松。 – FloppyDisk

回答

1

Joachim的回答提供了一个直接从ArrayList中删除的好方法,但我怀疑你确实想直接从模型中删除范围。 DefaultListModelremoveRange方法:

int index = contactList.getSelectedIndex(); 
people.removeRange(index, index + 4); 

我期望有正确的行为,从底层列表中删除的项目也是如此。假设是这种情况,那将是我怀疑的最好的方式。然后再次,我不知道秋千非常好:)

+0

哈哈.....在我意识到自己的错误之前,这些名字给我带来了很多痛苦:) 但是,eclipse似乎并不喜欢removeRange。我得到错误“从ArrayList 类型的方法removeRange(int,int)不可见” – pringles19

+0

糟糕。我的坏 - 将编辑。 –

+0

而不是将物品4移除4次,有时如果您向后移除,则更容易理解;第7项,第6项,第5项,第4项。 – rsp

4

这是一个奇怪的要求。之后删除3个项目?他们如何相互关联?他们必须以某种方式相互关联。这听起来像你有一个这样的联系人列表:

List<String> contacts = new ArrayList<String>(); 
contacts.add("John Doe"); 
contacts.add("Main street 1"); // His street. 
contacts.add("New York"); // His city. 
contacts.add("555 123 456 789"); // His phone. 
// etc.. 

这是真的吗?那么你应该真的考虑将相关元素分组到另一个代表对象的真实世界中。您可以创建一个JavaBean类Contact它看起来像这样:

public class Contact { 
    private String name; 
    private String street; 
    private String city; // You could consider another Address class for street and city as well. 
    private String phone; 
    // Add/generate getters and setters. 

    public Contact() { 
     // Keep default constructor alive. 
    } 

    public Contact(String name, String street, String city, String phone) { 
     this.name = name; 
     this.street = street; 
     this.city = city; 
     this.phone = phone; 
    } 
} 

这样你就这样结束了

List<Contact> contacts = new ArrayList<Contact>(); 
contacts.add(new Contact("John Doe", "Main Street 1", "New York", "555 123 456 789")); 
// etc.. 

,这样就可以仅仅通过索引中删除一个真正Contact

你甚至可以让它的People属性:

public class People { 
    private List<Contact> contacts; 
    // +getter +setter 
} 

尽量想OO。

9

虽然ListArrayList没有直接(和访问)removeRange()方法,需要这样一种方法是通过提供subList()方法去除。

subList()提供了原始列表的一部分视图。需要注意的重要部分是修改返回的List也将修改原始List。因此,要删除与指数indexindex+3的元素,你可以这样做:

myList.subList(index, index+4).clear(); 

注意的subList()第二个参数是排他性的,因此这subList()调用将返回一个List大小为4。

1

尝试,

people.subList(index, index+4).clear()