2009-11-27 87 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()