Je n'arriva pas à afficher le nombre de rows après avoir applique le filter. Quelqu'un a une idée comment le faire?:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
import java.awt.BorderLayout;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableRowSorter;
 
import org.jdesktop.swingx.JXTable;
 
public class AirspaceTableDemo {
 
  private JXTable                            table;
  private AirspaceTableModel                 tableModel;
  private JLabel                             filterLabel;
  private JTextField                         filterTextField;
  private JLabel                             rowCountLabel;
  private TableRowSorter<AirspaceTableModel> sorter;
  private static String[]                    data    = { "This is the 1st String", "String 2", "Another String", "The Final String" };
 
  private static String[]                    columns = { "Name", "Length", "Upper-case" };
 
  public AirspaceTableDemo() {
  }
 
  /**
  * @param args
  */
  public static void main( String[] args ) {
    AirspaceTableDemo demo = new AirspaceTableDemo();
    demo.create();
  }
 
  public void create() {
    javax.swing.SwingUtilities.invokeLater( new Runnable() {
      public void run() {
        JFrame frame = new JFrame( "Traffic Demo" );
        JPanel pane = new JPanel( new BorderLayout() );
        JPanel filterPane = new JPanel();
        tableModel = new AirspaceTableModel( data, columns );
        table = new JXTable( tableModel );
        sorter = new TableRowSorter<AirspaceTableModel>( tableModel );
        table.setRowSorter( sorter );
 
        table.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
        table.setDefaultRenderer( String.class, new AirspaceTableRenderer() );
        tableModel.addTableModelListener( new TableModelListener() {
 
          @Override
          public void tableChanged( TableModelEvent e ) {
            updateRowCounter();
 
          }
        });
 
        pane.add( new JScrollPane( table ), BorderLayout.CENTER );
        frame.getContentPane().add( pane );
 
        filterLabel = new JLabel( "Filter:" );
        filterTextField = new JTextField( 20 );
        filterTextField.getDocument().addDocumentListener( new DocumentListener() {
          public void changedUpdate( DocumentEvent e ) {
            newFilter();            
          }
 
          public void insertUpdate( DocumentEvent e ) {
            newFilter();
          }
 
          public void removeUpdate( DocumentEvent e ) {
            newFilter();
          }
        } );
 
        rowCountLabel = new JLabel( "Found:  " + table.getRowCount() );
        filterPane.add( filterLabel );
        filterPane.add( filterTextField );
        filterPane.add( rowCountLabel );
        pane.add( filterPane, BorderLayout.SOUTH );
        frame.setSize( 600, 300 );
        frame.setLocationRelativeTo( null );
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 
        frame.setVisible( true );
      }
    } );
 
  }
 
  private void updateRowCounter(){
    rowCountLabel.setText("Found:  " + table.getRowSorter().getViewRowCount() );
  }
 
  private void newFilter() {
    RowFilter<Object, Object> rf = new RowFilter<Object, Object>() {
      public boolean include( Entry<? extends Object, ? extends Object> entry ) {
        //filtering values in the first column, to filter all the columns it should be entry.getValueCount() - 1;
        for ( int i = entry.getValueCount() - 3; i >= 0; i-- ) {
          if ( entry.getStringValue( i ).contains( filterTextField.getText().trim() ) ) {            
            updateRowCounter();
            return true;
          }
        }
 
        // entry is not shown
        updateRowCounter();
        return false;
      }
    };
 
    /*RowFilter<AirspaceTableModel, Object> rf = null;
    //If current expression doesn't parse, don't update.
    try {
      rf = RowFilter.regexFilter( filterTextField.getText(), 0 );
    }
    catch ( java.util.regex.PatternSyntaxException e ) {
      return;
    }*/
    sorter.setRowFilter( rf );
 
  }
}
Le modèle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
mport javax.swing.table.AbstractTableModel;
 
public class AirspaceTableModel
    extends AbstractTableModel {
 
  public final static int ID       = 0;
  public final static int CAPACITY = 1;
  public final static int STATE    = 2;
 
  private String[]        data;
  private String[]        columns;
 
  public AirspaceTableModel( String[] data, String[] columns ) {
    this.data = data;
    this.columns = columns;
  }
 
  public int getColumnCount() {
    return columns.length;
  }
 
  @Override
  public String getColumnName( int column ) {
    return columns[column];
  }
 
  public int getRowCount() {
    return data.length;
  }
 
  public Object getValueAt( int rowIndex, int columnIndex ) {
    String theData = data[rowIndex];
    Object result = null;
    switch ( columnIndex ) {
      case 1:
        result = theData.length(); // auto-boxing.
        break;
      case 2:
        result = theData.toUpperCase();
        break;
      default:
        result = theData;
    }
 
    return result;
  }
 
}
Merci