gpt4 book ai didi

Java JTable - 仅显示与字符串匹配的行

转载 作者:行者123 更新时间:2023-11-30 07:08:08 25 4
gpt4 key购买 nike

我有一个 JTable,其中填充了来自数据库的数据。我已经添加了一个显示行的搜索功能,如果在将数据键入 JTextField 时单词与某些行匹配。但是在您键入不匹配任何行数据的字符串或单词时,我想要做的是隐藏所有行,JTable 将仅显示列名。就像当某些东西匹配 IT 时,只显示那些具有用户键入的字符串的行并隐藏其他行。

这是我正在使用的代码:

               if (text.length() == 0) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(
RowFilter.regexFilter(text));
} catch (PatternSyntaxException pse) {
System.err.println("Bad regex pattern");
}
}
}

最佳答案

您想使用 DocumentListener 以及行过滤器。你可以看到如何Write a DocumentListener .

基本上,监听器会监听文本字段的基础文档中的更改。从您在 DocumentListener 中重写的方法,您可以获取文本,就像您目前正在做的那样,并像您目前正在做的那样设置正则表达式 ex 过滤器

这是一个简单的例子(忽略小程序。我刚刚从 this post 获得了样板代码并添加了文档监听器)。注意:同一篇文章提供了一个答案,如果您正在寻找该功能,则允许您以不区分大小写的方式进行过滤

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class TestTableSorterFilter extends JApplet {

private String[] columnNames
= {"Country", "Capital", "Population in Millions", "Democracy"};

private Object[][] data = {
{"USA", "Washington DC", 280, true},
{"Canada", "Ottawa", 32, true},
{"United Kingdom", "London", 60, true},
{"Germany", "Berlin", 83, true},
{"France", "Paris", 60, true},
{"Norway", "Oslo", 4.5, true},
{"India", "New Delhi", 1046, true}
};

private JTable jTable = new JTable(data, columnNames);

private TableRowSorter<TableModel> rowSorter
= new TableRowSorter<>(jTable.getModel());

private JTextField jtfFilter = new JTextField();
private JButton jbtFilter = new JButton("Filter");

public TestTableSorterFilter() {
jTable.setRowSorter(rowSorter);

JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel("Specify a word to match:"),
BorderLayout.WEST);
panel.add(jtfFilter, BorderLayout.CENTER);

add(panel, BorderLayout.SOUTH);
add(new JScrollPane(jTable), BorderLayout.CENTER);

jtfFilter.getDocument().addDocumentListener(new DocumentListener(){

@Override
public void changedUpdate(DocumentEvent arg0) {}

@Override
public void insertUpdate(DocumentEvent arg0) {
String text = jtfFilter.getText();

if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter(text));
}
}

@Override
public void removeUpdate(DocumentEvent arg0) {
String text = jtfFilter.getText();
if (text.trim().length() == 0) {
rowSorter.setRowFilter(null);
} else {
rowSorter.setRowFilter(RowFilter.regexFilter(text));
}
}
});
}
}

关于Java JTable - 仅显示与字符串匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24228243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com