2014-08-27 3 views
0

JScrollPane의 JViewPort 객체를 사용하는 점에서 특정의 행을 취득하는 방법을 지금까지 알고있었습니다.JScrollPane 내의 JTable 모델의 모든 가시 행을 취득하는 방법

scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() { 

     @Override 
     public void adjustmentValueChanged(AdjustmentEvent e) { 
      JViewport viewport = scrollPane.getViewport(); 
      Point p = viewport.getViewPosition(); 
      int rowIndex = getLogsTable().rowAtPoint(p); 
      System.out.println("Minimum Y: " + viewport.getViewRect().getMinY()); 
      System.out.println("Min row: " + getLogsTable().rowAtPoint(new Point(0, (int) viewport.getViewRect().getMinY()))); 
      System.out.println("Maximum Y: " + viewport.getViewRect().getMaxY()); 
      System.out.println("Max row: " + getLogsTable().rowAtPoint(new Point(0, (int) viewport.getViewRect().getMaxY()))); 
     } 

    }); 

나는)합니다 (JViewport.getMinimumY()와 JViewport.getMaximumY 사이의 모든 행을 얻는 방법을 알아내는 힘든 시간을 보내고 있어요. 두 개의 뷰포트 지점 사이에 모든 행 항목을 모으는 방법이 있습니까 아니면 JScrollPane보기의 모든 행을 가져 오는 방법이 있습니까?

+1

당신이 테이블의 가시의 행이 스레드에서 @의 클레오 파트라의 답변을 참조 카운트를 원한다면 [? 얼마나 많은 행 JTable로 현재 표시되고 (http://stackoverflow.com/questions/11887642/how- many-rows-is-a-jtable- 현재 - 표시). 표시되는 모든 행의 목록을 가져 오려면 해당 대답이 도움이 될 것입니다. – dic19

+0

그래서 행 개수를 반복하려면 행 개수를 사용해야합니까? – cj5

+1

아니요, 간단히 첫 번째 행과 마지막 행만 있으면 충분합니다. 중간에있는 것이 계산 가능합니다. isntance : 첫 번째 행은 3이고 마지막 행은 7입니다. 그러면 {3,4,5,6,7}이됩니다. – dic19

답변

1

@ dic19의 의견에 따르면, 나는 코드 스 니펫을 사용했고 효과가있었습니다. 방금 마지막 행 인덱스 번호를 검색하는 추가 변수를 추가했습니다.

// need to wait for table to fully load 
    SwingUtilities.invokeLater(new Runnable() { 

     @Override 
     public void run() { 

      // getLogsTable() returns JTable instance 
      Rectangle vr = getLogsTable().getVisibleRect(); 
      int firstRow = getLogsTable().rowAtPoint(vr.getLocation()); 
      vr.translate(0, vr.height); 
      int visibleRows = getLogsTable().rowAtPoint(vr.getLocation()) - firstRow; 
      int lastRow = (visibleRows > 0) ? visibleRows+firstRow : getLogsTable().getRowCount(); 

      System.out.println("first visible row: " + firstRow + " last visible row: " + lastRow); 

      for(int rowNum=firstRow+1; rowNum<=lastRow; rowNum++) { 
        // LogsModel is a AbstractTableModel instance 
        LogsModel model = (LogsModel) getLogsTable().getModel(); 
        Log log = model.getData().get(getLogsTable().convertRowIndexToModel(rowNum-1)); 
        System.out.println(log.getLocation()); 
      } 

      System.out.println(lastRow); 
     } 

    }); 
+1

일 자신의 문제를 해결하는 데 도움이 되었습니까 당신이 현명하게 사용하기 때문에 [JTable의 # convertRowIndexToModel()] (http://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html# convertRowIndexToModel-int-). 그렇게 계속! – dic19