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