Java jtable 在输入框筛选
时间: 2023-12-28 18:04:54 浏览: 89
可以通过使用 `RowFilter` 实现 JTable 中的输入框筛选。具体步骤如下:
1. 创建 `JTextField` 用作输入框。
2. 创建 `JTable` 并将数据添加到表格中。
3. 获取 `JTable` 的 `RowSorter`,并将其设置为 `JTable` 的模型。
4. 创建 `RowFilter` 对象,该对象包含用于筛选的文本。
5. 将 `RowFilter` 对象与 `RowSorter` 相结合,并将其设置为 `JTable` 的 `RowSorter`。
6. 监听输入框的文本更改事件,并在每次更改时更新 `RowFilter` 对象。
以下是示例代码:
```java
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.RowFilter;
public class JTableFilterExample extends JFrame implements ActionListener {
private JTable table;
private JTextField filterField;
public JTableFilterExample() {
setTitle("JTable Filter Example");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// Create table model and set data
DefaultTableModel model = new DefaultTableModel();
model.addColumn("Name");
model.addColumn("Age");
model.addRow(new Object[]{"John", 26});
model.addRow(new Object[]{"Anna", 29});
model.addRow(new Object[]{"Bob", 31});
// Create table and set model
table = new JTable(model);
add(new JScrollPane(table), BorderLayout.CENTER);
// Create filter field
filterField = new JTextField();
filterField.addActionListener(this);
add(filterField, BorderLayout.SOUTH);
// Set row sorter
TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<>(model);
table.setRowSorter(sorter);
}
public void actionPerformed(ActionEvent e) {
// Get text from filter field
String text = filterField.getText();
// Create row filter
RowFilter<DefaultTableModel, Object> filter = RowFilter.regexFilter("(?i)" + text);
// Set row filter
TableRowSorter<DefaultTableModel> sorter = (TableRowSorter<DefaultTableModel>)table.getRowSorter();
sorter.setRowFilter(filter);
}
public static void main(String[] args) {
JTableFilterExample example = new JTableFilterExample();
example.setSize(300, 200);
example.setVisible(true);
}
}
```
在这个示例代码中,我们创建了一个包含姓名和年龄的表格,并添加了一个用于筛选的文本框。在 `actionPerformed` 方法中,我们获取输入框中的文本,并使用 `RowFilter.regexFilter()` 方法创建一个正则表达式行过滤器。最后,我们将行过滤器设置为表格的 `RowSorter` 中。在用户每次输入文本时,都会触发 `actionPerformed` 方法并更新行过滤器。这样,表格中仅显示与输入文本匹配的行。
阅读全文