public class TableSorterPanel extends JPanel {
public TableSorterPanel(JTable table) {
super(new GridBagLayout());
final JXTextField suchenFeld = new JXTextField("Filtert die Tabelle");
JLabel suchenlabel = new JLabel("Suche:", ImageLoader.SEARCHx24, 0);
suchenlabel.setLabelFor(suchenFeld);
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>();
table.setRowSorter(sorter);
sorter.setModel(table.getModel());
final JPanel test = new JPanel(new GridBagLayout());
final JButton clear = new JButton(ImageLoader.DELETEx16);
clear.setBorder(BorderFactory.createEmptyBorder());
clear.setBorderPainted(false);
clear.setContentAreaFilled(false);
clear.setBorder(BorderFactory.createEmptyBorder());
clear.setVisible(false);
suchenFeld.setBorder(BorderFactory.createEmptyBorder());
test.setBackground(Color.WHITE);
test.setBorder(new JTextField().getBorder());
suchenFeld.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
changes();
}
public void removeUpdate(DocumentEvent e) {
changes();
}
public void insertUpdate(DocumentEvent e) {
changes();
}
public void changes() {
String text = suchenFeld.getText();
if (text.length() == 0) {
sorter.setRowFilter(null);
clear.setVisible(false);
} else {
String regex = "(?i)" + Pattern.quote(text);
sorter.setRowFilter(RowFilter.regexFilter(regex));
clear.setVisible(true);
}
}
});
test.add(suchenFeld, GridBagConstraints.forClass(JTextField.class)
.fillHorizontal().west());
test.add(clear, GridBagConstraints.forClass(JButton.class).east());
add(suchenlabel, GridBagConstraints.forComponent(suchenlabel).top()
.bottom().left().right());
add(test, GridBagConstraints.forClass(JTextField.class).top()
.bottom().left().right().remainder().fillBoth());
}
}