2017-12-24 4 views
1

JTable 행을 기준으로 데이터를 표시하려면 어떻게해야합니까? 내 데이터는 수천 개의 행까지 거대 할 수 있으므로 행 단위로 표시하여 사용자가 채워지는 것을 볼 수 있습니다.행 단위로 JTable 표시

나는, paint 같은 여러 가지 방법을 시도했습니다 repaint, validate, 모든 model.fire ... 더하지만 여전히 내 테이블은 모든 것이 끝 부분에 추가 한 후 데이터를 보여줍니다. 나는이 방법을 문의하기 전에

public void updateTableRowByRow(String row) { 
    // length of row always equals cols 
    int cols = 16; 
    int i = 0; 
    DefaultTableModel model = (DefaultTableModel) gui.myTable.getModel(); 
    Vector<String> rowData = new Vector<String>(); 
    for (int c = 0; c < cols; c++) { 
     rowData.add(String.valueOf(row.charAt(i++))); 
    } 
    model.addRow(rowData); 
    // tried many things here to get it to refresh but nothing worked 
} 

, 나는 테이블을 취소 것이다 : 나는 방법을하고있어 방법의 예는 모든 추가 한 후

DefaultTableModel model = (DefaultTableModel) gui.myTable.getModel(); 
model.setRowCount(0); // delete all 
+0

왜 자신의'TableModel'을 구현하지 않습니까? – ThomasEdwin

+0

* "내 데이터가 수천 개의 행으로 커질 수 있으므로 행별로 표시하여 사용자가 채워지는 것을 볼 수 있습니다."* 실제로 대형 테이블을 실험 해 보았습니까? 데이터를 검색하는 것은 초당 수십만 개의 행을 차지할 수 있지만 테이블 자체는 그 순간에 표시 할 수있는 행 수를 렌더링하기에 충분할만큼 똑똑합니다. 일반적으로이 값은 40- 60 그 렌더링은 눈 깜짝 할 사이에 할 수 있습니다. –

+0

@ThomasEdwin AbstractTableModel에서 확장 한 사용자 정의 테이블 모델을 만들었지 만 작동하지 않았습니다. 내가 작성한 addRow 메서드에 fireTableDataChanged를 넣는다. 나는 모든 행을 추가 한 후 새로 고치려면 어떻게해야할지 모르겠다. ( – User1915

답변

0

내 테이블은 데이터를 보여줍니다 마지막으로

...

내 문제가 테이블에 추가하기 전에 데이터의 전처리로한다. 나는 파일을 읽고, 그 내용을 변환 한 다음 그 내용을 표에 추가하고있다.

작업이 완료 될 때까지 GUI가 다시 칠하지 못하게하는 EDT (Event Dispatch Thread)에서 처리 중입니다.

데이터 사전 처리를 위해 별도의 스레드를 사용해야합니다. 이렇게하면 새 데이터가 테이블 모델에 추가 될 때 GUI가 다시 그려집니다.

가장 쉬운 방법은 SwingWorker를 사용하는 것입니다. 스윙 작업자는 별도의 스레드에서 데이터를 처리 한 다음 GUI에 데이터를 표시 할 수 있도록 데이터를 "게시"할 수 있습니다.

자세한 내용 및 작동 예제는 Concurrency in Swing의 스윙 튜토리얼 섹션을 참조하십시오.