2011-03-25 3 views
8

사용자가 필터링 할 수있는 정보를 표시하기 위해 JTables를 사용하고 있습니다. 사용자가 필터링 후에 저장하면 필터링 된 테이블을 보존 용 텍스트 파일에 저장하려고합니다 (필터링 된 내용은 텍스트 파일에 저장되지 않습니다) .필터링 된 모델을 얻으려면 어떻게해야합니까?

필자는 방금이 튜토리얼의 필터링 부분 인 http://download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting을 따라 갔지만 정상적으로 작동하지만 모든 것을 포함하는 기본 모델과는 달리 현재 디스플레이의 모델을 얻을 수있는 방법이 확실하지 않습니다. 필터링되지 않았습니다.

내가 필터링하는 방식으로이 작업을 수행 할 수있는 방법이 있습니까?

감사합니다.

답변

15

행의 수 (getRowCount() 사용)에 필터링 된 (보이는) 행 수를 반환합니다. 0에서 rowCount까지 반복하고 convertRowIndexToModel()을 사용하여 각 행 인덱스를 모델 인덱스로 변환하고 각 모델 인덱스에서 모델에 데이터를 요청하여 필터링 된 (표시되는) 데이터 목록을 작성하십시오.

0

이 코드는이를 수행하는 방법을 보여줍니다. 버튼을 누른 후에는 B 행이 입력에 인쇄되지 않습니다.

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.RowFilter; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 
import javax.swing.table.TableRowSorter; 
import javax.swing.JButton; 
import java.awt.BorderLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 

public class JTableFilterDemo { 
    public static void main(String[] args) { 
     Object[][] data = { { "A", 5 }, { "B", 2 }, { "C", 4 }, { "D", 8 } }; 
     String columnNames[] = { "Item", "Value" }; 
     TableModel model = new DefaultTableModel(data, columnNames) { 
      public Class<?> getColumnClass(int column) { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     JTable table = new JTable(model); 

     RowFilter<Object, Object> filter = new RowFilter<Object, Object>() { 
      public boolean include(Entry entry) { 
       Integer population = (Integer) entry.getValue(1); 
       return population.intValue() > 3; 
      } 
     }; 

     TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(
       model); 
     sorter.setRowFilter(filter); 
     table.setRowSorter(sorter); 
     JScrollPane scrollPane = new JScrollPane(table); 
     JFrame frame = new JFrame("Filtering Table"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton btnNewButton = new JButton("Print values"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       for(int row = 0;row < table.getRowCount();row++) { 
        System.out.println(table.getModel().getValueAt(table.convertRowIndexToModel(row), 0)); 
       } 
      } 
     }); 
     frame.getContentPane().add(btnNewButton, BorderLayout.SOUTH); 
     frame.getContentPane().add(scrollPane); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
    } 
} 
+2

왜 다른 스레드로 납치 됐나요? – mKorbel

관련 문제