2009-11-27 2 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)의 이름이의 이름입니다 내 ArrayList. 기본적으로 배열에서 4 줄 블록 만 삭제하려고합니다. 배열의 위치와 그 이후의 위치입니다.

+0

,이 과제입니다? 나는 그것이 개인적으로 상관 없다. 연락처 목록과 주소록 및 GUI에 관한 지난 며칠 동안 몇 가지 질문을 발견했습니다. –

+0

연락처 개체 집합을 제거 하시겠습니까? 또는 각 연락처의 모든 데이터를 arraylist에 저장하고 있습니까? 그렇다면 BalusC의 대답을보고 코드를 캡슐화하십시오. 그것은 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다. – FloppyDisk

답변

1

요아킴의 대답은 ArrayList에서 직접 제거 할 수있는 좋은 방법이지만 실제로 모델에서 직접 범위를 제거하고 싶습니다.

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

내가뿐만 아니라 기본 목록에서 항목을 제거하는 올바른 동작을 기대 : DefaultListModelremoveRange 방법이있다. 그것이 사실이라고 가정하면, 그것이 내가 의심하는 최선의 방법 일 것입니다. 그럼 다시, 나는 아주 잘 스윙 몰라 :)

+0

하하 ..... 나는 내 실수를 깨닫기 전에 이름이 내게 많은 고통을 줬다. :) 그래, 이클립스는 removeRange를 좋아하지 않는 것 같다. "ArrayList 유형 에서 removeRange (int, int) 메서드가 표시되지 않습니다."오류가 발생합니다. – pringles19

+0

죄송합니다. 내 잘못 - 편집합니다. –

+0

4 번 항목을 4 번 제거하는 대신, 뒤로 제거하면 이해하기가 쉽습니다. item 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.. 

사실인가요? 그런 다음 관련 요소를 다른 실제 개체를 나타내는 그룹으로 그룹화하는 것을 고려해야합니다. 그냥 인덱스를 하나의 실제Contact를 제거 할 수 있도록 그냥

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

로 끝날

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

이 방법 : 당신은 다음과 같이 자바 빈즈 클래스 Contact를 만들 수 있습니다. OO를 생각하는

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

시도 :

당신은 심지어 People의 속성 만들 수 있습니다. ListArrayList가 직접 (접근) removeRange() 방법이없는 동안

9

는, 이러한 방법에 대한 필요성은 subList() 방법을 제공에 의해 제거된다.

subList()은 원본 목록의 일부에 대한보기를 제공합니다. 주의해야 할 중요한 부분은 반환 된 List을 수정하면 원본 List도 수정된다는 것입니다. subList()의 두 번째 인수가 독점이라고

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

주를, 그래서이 subList() 호출은 4의 크기와 List를 반환합니다 그래서 인덱스 indexindex+3을 가진 요소를 제거하기 위해, 당신은이 작업을 수행 할 수 있습니다.

1

시도,

그냥 호기심
people.subList(index, index+4).clear()