Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

กรอง (Filter) JTable ใน Java

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();
    }
}

ผลลัพธ์

กรอง (Filter) JTable ใน Java

กรอง (Filter) JTable ใน Java

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