JTable สร้าง/แสดงตารางยืดหยุ่น TableModel กำหนดเนื้อหา AbstractTableModel ขยายสำหรับ Custom Model แก้ไขเซลล์ด้วย setCellEditor() และ TableCellEditor กรองข้อมูลด้วย setRowFilter() ของ TableRowSorter
ตัวอย่าง: Filter JTable ด้วย Text Field
import java.awt.*;
import java.awt.event.*;
import java.util.regex.*;
import javax.swing.*;
import javax.swing.table.*;
public class FilterTableTest extends JFrame {
private JTable table;
private TableModel model;
public FilterTableTest() {
setTitle("Filter Table Test");
Object[][] rows = {
{"Adithya", "Content Developer", 25000},
{"Jai", "SME", 30000},
{"Chaitanya", "Java Engineer", 45000},
{"Ramesh", "Scala Developer", 40000},
{"Ravi", "SAP Consultant", 70000}
};
Object[] columns = {"Name", "Designation", "Salary"};
model = new DefaultTableModel(rows, columns) {
@Override
public Class<?> getColumnClass(int column) {
return column >= 0 && column < getColumnCount()
? getValueAt(0, column).getClass() : Object.class;
}
};
table = new JTable(model);
TableRowSorter<TableModel> sorter = new TableRowSorter<>(model);
table.setRowSorter(sorter);
add(new JScrollPane(table), BorderLayout.CENTER);
// Filter Panel
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel("Filter"), BorderLayout.WEST);
JTextField filterText = new JTextField();
panel.add(filterText, BorderLayout.CENTER);
add(panel, BorderLayout.NORTH);
// Filter Button
JButton button = new JButton("Filter");
button.addActionListener(e -> {
String text = filterText.getText();
if (text.isEmpty()) {
sorter.setRowFilter(null);
} else {
try {
sorter.setRowFilter(RowFilter.regexFilter(text));
} catch (PatternSyntaxException pse) {
System.out.println("Bad regex pattern");
}
}
});
add(button, BorderLayout.SOUTH);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
new FilterTableTest();
}
}
ผลลัพธ์


คำอธิบาย: TableRowSorter จัดการการเรียงและกรอง RowFilter.regexFilter() ใช้ Regular Expression กรองแถวที่ตรงกับ pattern