2014-03-04 3 views
0

텍스트 파일에서 데이터를 가져 와서 형성된 JTable이 있습니다. 약 522 개의 열과 수천 개의 행이있는 거대한 테이블입니다. 이 테이블의 많은 셀은 비어 있습니다. 이제 일부 열에서 사용할 수있는 데이터에 수학 연산을 적용 할 수 있기를 바랍니다. 이제는 여러 열을 선택할 수 있지만 이러한 값을 가져 오는 방법을 알지 못합니다. 테이블 열의 값을 저장하고 알고리즘에 따라 각 값을 수정할 수있는 배열 배열이 필요하다는 것을 알고 있습니다. 지금 당장 간단히 시작하기 위해 선택 열의 값을 인쇄 할 수 있기를 원하지만 단순하게 유지하기 위해 하나의 값만 인쇄 할 수 있기를 원하지만 그럴 수는 없습니다. 특정 셀의 값이 2로 인쇄됩니다. 4 번. 다음과 같이 내 테스트 코드는 다음과 같습니다 선택 전체 열 들어 ,이 코드를 사용하고 있습니다 : 나는 버튼이 내 GUI에서JTable의 전체 열 수정

public static void selectWholeColumn(final JTable table) 
{ 
final JTableHeader header = table.getTableHeader(); 
header.addMouseListener(new MouseAdapter() 
{ 
     public void mouseClicked(MouseEvent e) 
     { 
      int col = header.columnAtPoint(e.getPoint()); 
      if(header.getCursor().getType() == Cursor.E_RESIZE_CURSOR) 
      { 
       e.consume(); 
      } 
      else 
      { 
       table.setColumnSelectionAllowed(true); 
       table.setRowSelectionAllowed(false); 
       table.clearSelection(); 
       table.setColumnSelectionInterval(col,col); 
       table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);     

      } 
     } 

    }); 

} 

를하는 화재를 백엔드 클래스와 같은 JTable로 소요이 방법을 클릭하면 매개 변수는 선택한 열에서 모든 행의 값을 출력하기 위해 실행됩니다

public void filterData(final JTable table) 
{ 
    TableModel model = table.getModel(); 
    table.setCellSelectionEnabled(true); 
    table.setColumnSelectionAllowed(true); 
    table.setRowSelectionAllowed(false); 
     ListSelectionModel cellSelectionModel = table.getSelectionModel(); 
     cellSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 

     cellSelectionModel.addListSelectionListener(new ListSelectionListener() 
     { 
      public void valueChanged(ListSelectionEvent e) 
      { 
      String selectedData = null; 

      int[] selectedRow = table.getSelectedRows(); 
      int[] selectedColumns = table.getSelectedColumns(); 

      for (int i = 0; i < selectedColumns.length; i++) 
      { 
       for (int j = 0; j < selectedRow.length; j++) 
       { 
       selectedData = (String) table.getValueAt(selectedRow[i], selectedColumns[j]); 
       } 
      } 
      System.out.println("Selected: " + selectedData); 
      } 

     }); 

어떤 제안을 내가 인쇄하거나 기본적으로 선택된 열이나 열의 모든 행의 값을 얻을 수있는 방법으로, 나는 할 수 있도록 한 번에 데이터를 수정 하시겠습니까?

감사합니다. 리스너가 변화에 대해 호출됩니다 있지만

답변

2

TableModel 불구하고 반복하고 ListSelectionListenergetValueAt()를 사용하여, 합리적인 접근 방식입니다. 문제가있는 곳이 명확하지 않습니다. 하실 수 있습니다

  • StringBuilder을 사용하여 선택한 값을 연결하십시오.

  • List<String>에 선택된 값을 누적하십시오.

  • TableModel에서 선택을 유지하십시오 (hereSet<Integer>입니다).

  • TableCellRenderer 인 선택에서 작동합니다 (here).