2009-11-27 7 views
0

J'essaie de supprimer un élément d'une liste de matrices en le sélectionnant dans un JList et en cliquant sur "Supprimer".Suppression de ArrayList Java

Le code que j'ai jusqu'à présent,

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

Je sais que certaines choses sont nommées mal, mais les gens (p minuscule) est le nom de mon DefaultListModel et populaire (P majuscule) est le nom de mon ArrayList. Fondamentalement, je veux juste supprimer un bloc de 4 lignes d'un tableau. Donc, la position dans le tableau, et les 3 après.

+0

Juste par curiosité, est-ce pour une mission? Personnellement, cela ne me dérange pas si c'est le cas. C'est juste que j'ai remarqué plusieurs questions au cours des derniers jours concernant les listes de contacts, les carnets d'adresses et les GUI ... –

+0

Est-ce que vous supprimez un ensemble d'objets contact? Ou stockez-vous toutes les données pour chaque contact dans l'arborescence? Si oui, voyez la réponse de BalusC et essayez d'encapsuler le code. Cela rendra votre vie beaucoup plus facile. – FloppyDisk

Répondre

1

La réponse de Joachim donne un bon moyen de supprimer directement d'un ArrayList, mais je soupçonne que vous voulez vraiment supprimer la gamme directement du modèle. DefaultListModel a une méthode removeRange:

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

Je suppose que d'avoir le bon comportement, en supprimant les éléments de la liste sous-jacente ainsi. En supposant que ce soit le cas, ce serait la meilleure façon de le faire, je le soupçonne. Là encore, je ne sais pas Swing très bien :)

+0

haha ​​..... les noms m'ont causé beaucoup de douleur avant que je me rende compte de mon erreur :) mais oui, eclipse ne semble pas aimer removeRange. Je reçois l'erreur "La méthode removeRange (int, int) du type ArrayList n'est pas visible" – pringles19

+0

Oups. Mon mauvais - va éditer. –

+0

Au lieu de supprimer l'élément 4 4 fois, il est parfois plus facile de le comprendre si vous le retirez en arrière; items 7, 6, 5, 4. – rsp

4

Ceci est une exigence étrange. Supprimer 3 éléments après? Comment sont-ils liés les uns aux autres? Ils doivent être en quelque sorte liés les uns aux autres. Il semble que vous ayez une liste de contacts qui ressemble à ceci:

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.. 

Est-ce vrai? Ensuite, vous devriez vraiment envisager de regrouper les éléments liés dans un autre objet représentant le monde réel. Vous pouvez créer une classe Javabean Contact qui ressemble à ceci:

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

De cette façon, vous finissez juste avec

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

de sorte que vous pouvez simplement supprimer un seul réelContact par index.

Vous pouvez même en faire une propriété de People:

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

Essayez de penser OO.

9

Alors que List et ArrayList n'ont pas directement (et accessible) méthode removeRange(), la nécessité d'une telle méthode est retirée en fournissant la méthode subList().

subList() fournit une vue dans une partie de la liste originale. La partie importante à noter est que la modification du List modifié modifiera également l'original List. Donc, pour supprimer les éléments avec les indices index à index+3, vous pouvez le faire:

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

Notez que le deuxième argument de subList() est exclusive, donc cet appel subList() retournera un List avec une taille de 4.

1

Essayez,

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