2011-03-25 36 views
8

Estoy trabajando con JTables para mostrar información que los usuarios pueden filtrar, y si el usuario guarda después de filtrar quiero guardar la tabla filtrada en un archivo de texto para persistencia (significa que todo lo que se filtró no se guardará en el archivo de texto) .¿Cómo puedo obtener el modelo filtrado?

Para el filtrado Acabo de seguir la parte de filtrado de este tutorial: http://download.oracle.com/javase/tutorial/uiswing/components/table.html#sorting y funciona bien, pero no estoy seguro de que pueda obtener un modelo de la pantalla actual en lugar del modelo subyacente que contiene todo eso no ha sido filtrado

¿Hay alguna manera de hacer esto con esto con la forma en que estoy filtrando?

Gracias!

Respuesta

15

Pregunta a la tabla su número de filas (usando getRowCount()), que devolverá el número de filas filtradas (visibles). Iterar de 0 a rowCount, convierta cada índice de fila al índice de modelo usando convertRowIndexToModel(), y solicite a su modelo los datos en cada índice de modelo para compilar la lista de datos filtrados (visibles).

0

Este código muestra cómo hacerlo. Tenga en cuenta que la fila B no se imprime en la entrada después de presionar el botón.

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

por qué secuestrar a otro hilo – mKorbel

Cuestiones relacionadas