2011-12-05 3 views
0

페이징 구현을 위해 사용자 정의 AbstractTableModel의 JTable을 실현했습니다. 페이지 당 5 항목을 표시하고 싶지만 문제가 있습니다. 표시 할 N 항목이있는 경우 (N을 5의 배수로 사용) 모든 항목이 정상이지만, 예를 들어 표시 할 요소가 14면, 나는 예외를 얻는다. 문제는 각 셀 값을 가져 오는 메소드가 바운드 상태가된다는 것입니다. 특히 문제가 사실다중 페이지 JTable : 행보다 적은 항목을 표시 할 수 없음

public Object getValueAt(int row, int col) { 
    int realRow = row + (pageOffset * pageSize); 
    return data[realRow].getValueAt(col); 
} 

방법으로, 우리는 (0 ~ 4) 5 행 (14) 요소를 가지고 있지만, 분명히 우리가 마지막 요소를 취득 할 때, 우리가 할 : realRow = 4 + (2*5) 분명히 내가 가진 행 14에 요소가 없습니다. 어떻게이 문제를 해결할 수 있습니까? 내 프로그램에서 14 번째 파일에 도달하면 가치를 얻지 못하게 할 수 있습니까? 가능한가?

+0

에 swith를 생각 : 당신의 코드에서 , pageOffset 및 pageSize 란 무엇입니까? 그것들은 표준 tableModel 필드의 어떤 종류도 아니므로 그것이 무엇인지 알고 있으면 우리가 당신의 문제를 이해하는 데 도움이 될 것입니다. – Colby

+0

pageOffset은 페이지 번호입니다 (0 ~ 4 항목의 경우 pageOffset = 0, 5 ~ 9 항목의 경우 1, 10-14의 항목의 경우 2) pageSize는 페이지 당 요소 수입니다 (이 경우 5입니다) – Michele

답변

1

단의 허용 가능한 최대로 값을 고정 :

realRow = Math.min(realRow, getRowCount()); 

부록을 다음과 같이 example cited에서 getValueAt() 구현 :

// Work only on the visible part of the table. 
public Object getValueAt(int row, int col) { 
    int realRow = row + (pageOffset * pageSize); 
    if (realRow < data.length) { 
     return data[realRow].getValueAt(col); 
    } else { 
     return null; 
    } 
} 

이 또한 고려 BasicArrowButton.

+0

그러나 그때 그녀는 존재하지 않는 행에 대한 값을 얻게 될 것이고, 이것은 예외에 비해 실제로 개선되지는 않습니다. 그것은 단지 부적절하게 개발 된 모델 인이 문제를 숨 깁니다. – Colby

+0

인용 된 예제를 기반으로 업데이트합니다. – trashgod

1

모델의 getRowCount 메소드가 원하는대로 인라인되어 있는지 확인하십시오. getRowCount 메소드는 존재하지 않는 행에 대해 getValueAt를 호출하지 않도록 테이블에 허용되는 수를 리턴해야합니다. 따라서 행 14가 없다면 행 수가 그다지 높지 않아야합니다.

+0

내 getRowCount는 'return Math.min (pageSize, data.length); ' – Michele

+0

입니다. 따라서'data' 필드는 여러 페이지의 전체 테이블에 대한 데이터이거나 각 페이지마다'데이터 '가 다른가요? – Colby

+0

데이터 필드는 여러 페이지의 전체 테이블에 대한 데이터입니다. – Michele

1

나는하지 easy job, 나는, 어쩌면 더 easies 방법이 code을 구현하지만, 실제 효과는 JScrollBars을 잠글 수 있고, aephyr's code보고 suggessting 아마도 당신이 명확하게 할 수 NEVER

+0

당신 말이 맞아요. 좋은 예. – trashgod

+0

나는 당신이 게시 한 두 링크를 이미 보았고 실제로 두 번째 링크를 사용합니다. 그러나 그것은 모든 페이지에 표시되는 요소의 수에 대해 완벽하게 나눌 수있는 요소 (0으로 유지됨)와 함께 작동합니다 – Michele

관련 문제