2012-06-26 4 views
1

다음 상황 : rowindex가있는 데이터 용 컨테이너가 필요합니다. 현재 우리는 tablemodels 및 update tablerownumbers를 수동으로 사용합니다 (미친 알고리즘을 사용하여 해당 컨테이너 내에서 데이터를 추가, 삭제 및 이동 한 후 업데이트 유지).인덱스를 자동으로 업데이트하는 데 사용할 컨테이너는 무엇입니까?

이러한 tablerows를 업데이트하는 세 번째 버그를 찾은 후 마침내 첫 번째 생각은 LinkedList를 사용하고있었습니다. 내가 싫어하는 점은 LinkedList 내에서 항목을 삭제하거나 읽지 않고 항목을 이동할 수는 있지만 그래도 만족스럽지 만 여전히 만족스러워 보입니다. 자체 테이블을 유지하고 모든 이벤트에 대해 업데이트하여 동기화 상태를 유지해야합니다.

RowHeader Example

대체 방법을 추천 할 수 있다면 궁금합니다. 그래서 나는 어떤 종류의 용기를 사용하고 싶습니까?

감사 ymene는

+0

왜이 경우 미친 알고리즘이 필요한지 잘 모르겠습니다. 'List'를 기반으로'TableModel'을 생성하고 동기를 유지하는 것은 간단합니다 (이벤트를 발생시키는'List'가 있거나'List'에서 변경을 감지하는 또 다른 훅이있는 경우) – Robin

+0

아마도 제가 논문을 과장 해 버렸을 것입니다 알고리즘 조금. 방금 이미 인덱스가있는 컨테이너를 사용하는 것이 더 쉬울 수도 있다고 생각했습니다. 우리는 실제로 이러한 사건을 일으키는 목록을 가지고 있습니다. 그래서 당신은 고전적인 방법으로 가서 동기화를 유지하기 위해 논문 이벤트를 수신 Rowheader를 업데이 트합니까? – crusam

+0

'DefaultTableModel' 또는'AbstractTableModel'을 사용하고 있습니까? –

답변

2

나는 완전히 질문을 이해 모르겠어요. 그러나 List<Person>이라고 가정하고 행 번호, 사람 이름 및 사람 성을 표시하는 테이블이 필요하면 사람 또는 목록의 인덱스가 필요하지 않습니다.

public class PersonTableModel extends AbstractTableModel { 

    private List<Person> persons; 

    public int getRowCount() { 
     return persons.size(); 
    } 

    public int getColumnCount() { 
     return 3; 
    } 

    public Object getValueAt(int row, int col) { 
     if (col == 0) { 
      return row + 1; 
     } 
     else if (col == 1) { 
      return persons.get(row).getFirstName(); 
     } 
     else { 
      return persons.get(row).getLastName(); 
     } 
    } 
    ... 
} 

LinkedList에 대한 O (n)보다는 O (1)이기 때문에 ArrayList가 LinkedList보다 훨씬 효율적입니다.

+0

나는 내 질문에 주목했다. 정말로 그 점을 지적했다. 나는 그것을 미안하다. 테이블 자체는 이미 괜찮습니다.하지만 사용자에게 표시해야하는 tablerowheader에 대한 추가 테이블 (스크롤과 같은 이유 표시 용)이 있습니다. 드래그 앤 드롭으로 이동 작업을 수행하는 헤더이기도합니다. 나는 일반적으로이 두 테이블을 동기화해야합니다. 그래서 내 질문은이 tabloownumbers를 구성하는 방법에 관한 것이 었습니다. 나는 그림을 추가했다. 그것은 희망을 갖고 조금 더 잘 설명한다. – crusam

+0

rowHeader 테이블 모델은 주 테이블 모델에 의해 시작된 이벤트를 수신하고 주 테이블 모델의 새 행 수에 따라 내용을 조정해야합니다. 그러나 행 수가 아닌 다른 것이 왜 변경되어야하는지 나는 알지 못합니다. 그리고 그것의 getValueAt() 메소드는 인덱스 0에있는 컬럼에 대한 나의 대답과 유사해야한다. –

관련 문제