Xóa là một trong những chức năng cơ bản nhất mà chúng ta thực hiện trên JTable khi thao tác với cơ sở dữ liệu. Xóa một row trên JTable thường đi kèm với việc chúng ta xóa một bản ghi trong database. Cách làm khá đơn giản. Tuy nhiên để thực hiện một cách đúng đắn và hiệu quả, chúng ta cần nắm rõ về cấu trúc dữ liệu của JTable, hay nói cách khác là về data model của JTable.
Có nhiều bạn có thể sẽ làm theo cách như sau: khi thực hiện xóa 1 row, các bạn xóa bản ghi tương ứng trong database, sau đó setModel lại cho JTable. Cách này cũng cho ra kết quả nhưng là một cách không thực tế và nên tránh. Trong trường hợp dữ liệu của bạn nhiều, việc setModel sẽ tốn khá nhiều thời gian cho việc truy xuất để lấy dữ liệu ra từ database.
Có một cách khác hay hơn nhiều. Trong data model, bạn hãy tạo ra một phương thức như sau:
Phương thức này có nhiệm vụ remove 1 đối tượng (tương ứng với 1 row trên JTable) trong data của model xác định bởi tham số là chỉ số hàng được chọn để xóa của bảng(trong code ví dụ, data của mình là một ArrayList nên để xóa 1 đối tượng, mình dùng phương thức remove của nó). Khi phương thức này được gọi, JTable sẽ tự update giao diện của nó để phù hợp với data model.
Chúng ta tạo một JButton để thực hiện xóa row được chọn trên JTable. Code xử lý sự kiện của nút như sau:
Download source code
Happy Coding!
Có nhiều bạn có thể sẽ làm theo cách như sau: khi thực hiện xóa 1 row, các bạn xóa bản ghi tương ứng trong database, sau đó setModel lại cho JTable. Cách này cũng cho ra kết quả nhưng là một cách không thực tế và nên tránh. Trong trường hợp dữ liệu của bạn nhiều, việc setModel sẽ tốn khá nhiều thời gian cho việc truy xuất để lấy dữ liệu ra từ database.
Có một cách khác hay hơn nhiều. Trong data model, bạn hãy tạo ra một phương thức như sau:
1 2 3 4 | public void removeRow( int row) { data.remove(row); fireTableDataChanged(); } |
Phương thức này có nhiệm vụ remove 1 đối tượng (tương ứng với 1 row trên JTable) trong data của model xác định bởi tham số là chỉ số hàng được chọn để xóa của bảng(trong code ví dụ, data của mình là một ArrayList nên để xóa 1 đối tượng, mình dùng phương thức remove của nó). Khi phương thức này được gọi, JTable sẽ tự update giao diện của nó để phù hợp với data model.
Chúng ta tạo một JButton để thực hiện xóa row được chọn trên JTable. Code xử lý sự kiện của nút như sau:
1 2 3 4 5 6 7 8 9 10 11 | private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if (myTable.getSelectedRowCount() > 0 ) { int realIndex = myTable.convertRowIndexToModel(myTable.getSelectedRow()); // delete record in database //.......................... // update table UI ((CustomTableModel) myTable.getModel()).removeRow(realIndex); myTable.repaint(); } } |
Download source code
Happy Coding!
Đăng nhận xét