JTable là một trong những thành phần quan trọng của Java Swing package được sử dụng để hiển thị và chỉnh sửa dữ liệu theo dạng Table (Dữ liệu được trình bày theo dạng hàng và cột). Nó tương tự như một bảng tính trong excel file.
Khởi tạo JTable
JTable cung cấp một số constructor cho phép khởi tạo một JTable instance như sau:
- JTable() – Khởi tạo một JTable rỗng.
- JTable(int rows, int cols) – Khởi tạo một JTable với số dòng và cột được chỉ định.
- JTable(Object[][] data, Object []Column) – Khởi tạo một Jtable với các tên cột được chỉ định trong Object[] Column và dữ liệu trong Object[][] data.
Một số hàm thường xuyên sử dụng trong JTable:
- addColumn(TableColumn column) – Thêm một cột vào cuối bảng.
- editCellAt(int row, int col) – Chỉnh sửa ô giao nhau của cột số col và hàng số row, nếu các chỉ số đã cho hợp lệ và ô tương ứng có thể chỉnh sửa được.
- setValueAt(Object value, int row, int col) – Cập nhật giá trị tạo ô có số cột là col và hàng row thành giá trị value mới.
- clearSelection() – Bỏ chọn tất cả các cột và hàng trước đó đã được chọn.
Ví dụ tạo một bảng gồm 3 cột Name, Roll Number và Department. Lưu ý trong đây mình có sử dụng JScrollPane để cho phép JTable có thể cuộn trong trường hợp nó chứa nhiều dữ liệu.
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; class JTableExample { public static void main(String[] args) { JFrame jFrame = new JFrame(); // Frame Title jFrame.setTitle("JTable Example"); // Data to be displayed in the JTable String[][] data = { { "Kundan Kumar Jha", "4031", "CSE" }, { "Anand Jha", "6014", "IT" } }; // Column Names String[] columnNames = { "Name", "Roll Number", "Department" }; // Initializing the JTable JTable jTable = new JTable(data, columnNames); jTable.setBounds(30, 40, 200, 300); // adding it to JScrollPane JScrollPane sp = new JScrollPane(jTable); jFrame.add(sp); // Frame Size jFrame.setSize(500, 200); jFrame.setLocationRelativeTo(null); jFrame.setVisible(true); } }
Output
Sắp xếp trong JTable
Chắc hẵn dữ liệu dạng bảng như JTable nhu cầu sắp xếp dữ liệu là vô cùng cần thiết rồi phải không nào. Việc này chúng ta có thể làm khá đơn giản với setAutoCreateRowSorter() method được cung cấp sẵn trong JTable.
import java.awt.*; import javax.swing.*; class JTableSorterTest { public static void main(String[] args) { JFrame jFrame = new JFrame(); jFrame.setTitle("JTableHeaderHide Test"); String[] columnNames = {"Name", "Age", "City"}; Object[][] data = {{"Raja", "35", "Hyderabad"}, {"Adithya", "25", "Chennai"}, {"Vineet", "23", "Mumbai"}, {"Archana", "32", "Pune"}, {"Krishna", "30", "Kolkata"}}; JTable table = new JTable(data, columnNames); JScrollPane scrollPane = new JScrollPane(table); // Cho phep table sap xep table.setAutoCreateRowSorter(true); jFrame.add(scrollPane, BorderLayout.CENTER); jFrame.setSize(375, 250); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setLocationRelativeTo(null); jFrame.setVisible(true); } }
Filter trong JTable
Chúng ta có thể lọc một bảng bằng phương thức setRowFilter () của lớp TableRowSorter.
import java.awt.*; import java.awt.event.*; import java.util.regex.*; import javax.swing.*; import javax.swing.table.*; class FilterTableTest { public static void main(String args[]) { JTable table; TableModel model; JFrame jFrame = new JFrame(); jFrame.setTitle("FilterTable 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) { public Class getColumnClass(int column) { Class returnValue; if ((column >= 0) && (column < getColumnCount())) { returnValue = getValueAt(0, column).getClass(); } else { returnValue = Object.class; } return returnValue; } }; table = new JTable(model); final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); table.setRowSorter(sorter); jFrame.add(new JScrollPane(table), BorderLayout.CENTER); JPanel panel = new JPanel(new BorderLayout()); JLabel label = new JLabel("Filter"); panel.add(label, BorderLayout.WEST); final JTextField filterText = new JTextField(""); panel.add(filterText, BorderLayout.CENTER); jFrame.add(panel, BorderLayout.NORTH); JButton button = new JButton("Filter"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String text = filterText.getText(); if (text.length() == 0) { sorter.setRowFilter(null); } else { try { sorter.setRowFilter(RowFilter.regexFilter(text)); } catch (PatternSyntaxException pse) { System.out.println("Bad regex pattern"); } } } }); jFrame.add(button, BorderLayout.SOUTH); jFrame.setSize(400, 300); jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jFrame.setLocationRelativeTo(null); jFrame.setVisible(true); } }
Output
Nguồn tham khảo
https://www.tutorialspoint.com/how-can-we-sort-a-jtable-on-a-particular-column-in-java
https://www.geeksforgeeks.org/java-swing-jtable/
https://www.tutorialspoint.com/how-can-we-filter-a-jtable-in-java