我想JTable
按一个字符串完全过滤。我的过滤器是这样的:
Pattern.quote(textfield.getText());
但是,当我过滤“ G”时,我也会获得所有JTable
带有条目“ KG”的行。我只想要带有条目“ G”的行。我看了如何使用表格:排序和过滤,但仍然看不到。
另一个示例:RowFilter#regexFilter(...)(Java Platform SE 8)
返回的过滤器使用Matcher.find()进行包含性测试。要测试完全匹配,请使用字符“ ^”和“ $”分别匹配字符串的开头和结尾。例如,“ ^ foo $”仅包括其字符串恰好是“ foo”的行,而不包括例如“ food”的行。有关支持的正则表达式构造的完整说明,请参见模式。
import java.awt.*;
import java.awt.event.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableFilterDemo2 {
public JComponent makeUI() {
String[] columnNames = {"Item"};
Object[][] data = {{"G"}, {"KG"}, {"XG"}, {"Y"}, {"Z"}, {"*G"}};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
TableRowSorter<TableModel> sorter = new TableRowSorter<>(model);
JTable table = new JTable(model);
table.setRowSorter(sorter);
JTextField textField = new JTextField("G");
JButton button = new JButton("Toggle filter");
button.addActionListener(e -> {
if (sorter.getRowFilter() != null) {
sorter.setRowFilter(null);
} else {
String text = Pattern.quote(textField.getText());
String regex = String.format("^%s$", text);
sorter.setRowFilter(RowFilter.regexFilter(regex));
}
});
JPanel p = new JPanel(new BorderLayout());
p.add(textField, BorderLayout.NORTH);
p.add(new JScrollPane(table));
p.add(button, BorderLayout.SOUTH);
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new JTableFilterDemo2().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句