gpt4 book ai didi

java - 按列值动态过滤 jTable

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

我需要根据特定列中的值动态过滤我的 JTable。因此,如果我有 2 列,例如“国家/地区”和“首都”,我只想按国家/地区列进行过滤。我通过实现这段代码找到了我的问题的部分解决方案:

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
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.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class TestTableSortFilter extends JPanel {

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 DefaultTableModel model = new DefaultTableModel(data, columnNames);
private JTable jTable = new JTable(model);

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

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

public TestTableSortFilter() {
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);

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

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

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

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

@Override
public void removeUpdate(DocumentEvent e) {
String text = jtfFilter.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."); //To change body of generated methods, choose Tools | Templates.
}

});
}

问题是,当我过滤表格时,它会按所有列而不是特定列进行过滤。提前感谢您的帮助。

最佳答案

阅读 Sorting and Filtering 上的 Swing 教程部分一个在单个列上过滤的工作示例。

关键是在创建正则表达式过滤器时指定列。您还可以检查 API 的 RowFilter.regexFilter(...) 参数。

关于java - 按列值动态过滤 jTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39926552/

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