| 12
 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 );
 
  }
} | 
Partager