【发布时间】:2015-10-01 11:30:01
【问题描述】:
这个问题与这里提到的问题有关: [I want to read from a txt file and write to an existing JTable
我制作了一个程序,它可以读取 txt 文件并写入 JTable。我还创建了一个方法,它允许我动态搜索 JTable 的内容并显示与单词匹配的结果。 但是,我在 JTable 中编写的每个新条目都可以从过滤器中找到。但是当我加载一个 txt 文件内容并尝试使用搜索过滤器之后,结果无法显示,当我开始在文本字段上输入内容时 JTable 就会消失。
我的搜索方法代码如下:
//Creation and functionality of the Search Field
class TestTableSortFilter extends JPanel {
public TableRowSorter < TableModel > rowSorter = new TableRowSorter < > (table.getModel());
public JTextField searchFilter = new JTextField();
public TestTableSortFilter() {
table.setRowSorter(rowSorter);
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel("Search:"),
BorderLayout.WEST);
panel.add(searchFilter, BorderLayout.CENTER);
setLayout(new BorderLayout());
add(panel, BorderLayout.SOUTH);
add(new JScrollPane(table), BorderLayout.CENTER);
searchFilter.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
String text = searchFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
}
}
@Override
public void removeUpdate(DocumentEvent e) {
String text = searchFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
}
}
@Override
public void changedUpdate(DocumentEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
} //end TestTableSortFilter
} //end class table sort & creating the sorter for Search
【问题讨论】:
-
throw new UnsupportedOperationException("Not supported yet.");...不会有帮助... -
如果我删除它,我将无法再使用 DocumentListener,因为它必须使用 DocumentEvent 更新
-
你需要删除
Exception,否则会导致DocumentListener停止响应,导致EDT不稳定 -
我这样做了,但不幸的是问题仍然存在。当我打开数据库并且程序从 txt 文件中读取字符串时,它无法执行任何搜索
-
我猜从你以前的question 的样子来看,你在使用
JTable#setModel(newModel)方法后需要使用TableRowSorter#setModel(newModel)。
标签: java swing jtable rowfilter documentlistener