Lập trình Java Swing với ứng dụng quản lý học viên phần 5

Phần hướng dẫn lập trình Java Swing với ứng dụng quản lý học viên do đội ngũ Team Việt Dev biên soạn. Nội dung phần 5 nhằm hướng dẫn xây dựng tính năng quản lý thông tin học viên.

Java Swing là một phần của JFC (Java Foundation Classes) được sử dụng để tạo các ứng dụng Window-Based. Java Swing được xây dựng ở trên cùng của AWT (Abstract Windowing Toolkit) và được viết bằng ngôn ngữ lập trình Java.

Nhằm giúp các bạn sinh viên, học viên hay một số bạn đang có nhu cầu tìm hiểu về lập trình Java Swing thì đội ngũ Team Việt Dev biên soạn một số tài liệu Java Swing và phần hướng dẫn lập trình Java Swing với ứng dụng quản lý học viên.

Lập trình Java Swing với ứng dụng quản lý học viên

Sau khi đã cài đặt đầy đủ các công cụ lập trình, hệ quản trị cơ sở dữ liệu… thì tiếp theo chúng ta sẽ khởi tạo dự án ứng dụng quản lý học viên trên Netbeans IDE với ngôn ngữ lập trình Java Swing.

Bước 1: Thiết kế giao diện màn hình quản lý học viên

Bây giờ để bạn mở màn hình HocVienPanel.java lên để thực hiện thiết kế giao diện cho màn hình quản lý học viên.
Màn hình quản lý học viên sẽ gồm một Button để thêm mới dữ liệu, một Panel để hiển thị dữ liệu từ trong danh sách cơ sở dữ liệu lên Table, và một TextField để nhập dữ liệu giúp xử lý tìm kiếm nhanh.

Lập trình Java Swing với ứng dụng quản lý học viên

Bước 2: Tạo lớp kết nối cơ sở dữ liệu, viết phương thức truy vấn dữ liệu.

Lớp DBConnect.java giúp kết nối cơ sở dữ liệu.

package com.teamvietdev.qlhv.dao;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnect {

    public static Connection getConnection() {
        Connection cons = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            cons = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/db_qlhv", "root", "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cons;
    }

    public static void main(String[] args) {
        System.out.println(getConnection());
    }
    
}

Tạo lớp thực hiện truy vấn dữ liệu từ cơ sở dữ liệu:

Lớp HocVienDAO.java

package com.teamvietdev.qlhv.dao;

import com.teamvietdev.qlhv.model.HocVien;
import java.util.List;

public interface HocVienDAO {

    public List<HocVien> getList();

}

Lớp HocVienDAOImpl.java

package com.teamvietdev.qlhv.dao;

import com.teamvietdev.qlhv.model.HocVien;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class HocVienDAOImpl implements HocVienDAO {

    @Override
    public List<HocVien> getList() {
        Connection cons = DBConnect.getConnection();
        String sql = "SELECT * FROM hoc_vien";
        List<HocVien> list = new ArrayList<>();
        try {
            PreparedStatement ps = (PreparedStatement) cons.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                HocVien hocVien = new HocVien();
                hocVien.setMa_hoc_vien(rs.getInt("ma_hoc_vien"));
                hocVien.setHo_ten(rs.getString("ho_ten"));
                hocVien.setSo_dien_thoai(rs.getString("so_dien_thoai"));
                hocVien.setDia_chi(rs.getString("dia_chi"));
                hocVien.setNgay_sinh(rs.getDate("ngay_sinh"));
                hocVien.setGioi_tinh(rs.getBoolean("gioi_tinh"));
                hocVien.setTinh_trang(rs.getBoolean("tinh_trang"));
                list.add(hocVien);
            }
            ps.close();
            cons.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}

Lớp HocVienService.java

package com.teamvietdev.qlhv.service;

import com.teamvietdev.qlhv.model.HocVien;
import java.util.List;

public interface HocVienService {
    
    public List<HocVien> getList();
    
}

Lớp HocVienServiceImpl.java

package com.teamvietdev.qlhv.service;

import com.teamvietdev.qlhv.dao.HocVienDAO;
import com.teamvietdev.qlhv.dao.HocVienDAOImpl;
import com.teamvietdev.qlhv.model.HocVien;
import java.util.List;

public class HocVienServiceImpl implements HocVienService {

    private HocVienDAO hocVienDAO = null;

    public HocVienServiceImpl() {
        this.hocVienDAO = new HocVienDAOImpl();
    }

    @Override
    public List<HocVien> getList() {
        return hocVienDAO.getList();
    }

}

Bước 3: Bạn tạo lớp ClassTableModel.java trong gói utility để trình bày cách dữ liệu hiển thị

package com.teamvietdev.qlhv.utility;

import com.teamvietdev.qlhv.model.HocVien;
import java.util.List;
import javax.swing.table.DefaultTableModel;

public class ClassTableModel {

    public DefaultTableModel setTableHocVien(List<HocVien> listItem, String[] listColumn) {
        int columns = listColumn.length;
        DefaultTableModel dtm = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int rowIndex, int colIndex) {
                return false;
            }

            @Override
            public Class<?> getColumnClass(int columnIndex) {
                return columnIndex == 7 ? Boolean.class : String.class;
            }
        };
        dtm.setColumnIdentifiers(listColumn);
        Object[] obj;
        int num = listItem.size();
        HocVien hocVien = null;
        for (int i = 0; i < num; i++) {
            hocVien = listItem.get(i);
            obj = new Object[columns];
            obj[0] = hocVien.getMa_hoc_vien();
            obj[1] = (i + 1);
            obj[2] = hocVien.getHo_ten();
            obj[3] = hocVien.getNgay_sinh();
            obj[4] = hocVien.isGioi_tinh() == true ? "Nam" : "Nữ";
            obj[5] = hocVien.getSo_dien_thoai();
            obj[6] = hocVien.getDia_chi();
            obj[7] = hocVien.isTinh_trang();
            dtm.addRow(obj);
        }
        return dtm;
    }

}

Tạo lớp QuanLyHocVienController.java trong gói controller

package com.teamvietdev.qlhv.controller;

import com.teamvietdev.qlhv.model.HocVien;
import com.teamvietdev.qlhv.service.HocVienService;
import com.teamvietdev.qlhv.service.HocVienServiceImpl;
import com.teamvietdev.qlhv.utility.ClassTableModel;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author TVD
 */
public class QuanLyHocVienController {

    private JPanel jpnView;
    private JButton btnAdd;
    private JTextField jtfSearch;

    private ClassTableModel classTableModel = null;

    private final String[] COLUMNS = {"Mã học viên", "STT", "Tên học viên", "Ngày sinh",
        "Giới tính", "Số điện thoại", "Địa chỉ", "Trạng thái"};

    private HocVienService hocVienService = null;

    private TableRowSorter<TableModel> rowSorter = null;

    public QuanLyHocVienController(JPanel jpnView, JButton btnAdd, JTextField jtfSearch) {
        this.jpnView = jpnView;
        this.btnAdd = btnAdd;
        this.jtfSearch = jtfSearch;

        this.classTableModel = new ClassTableModel();

        this.hocVienService = new HocVienServiceImpl();
    }

    public void setDataToTable() {
        List<HocVien> listItem = hocVienService.getList();
        DefaultTableModel model = classTableModel.setTableHocVien(listItem, COLUMNS);
        JTable table = new JTable(model);

        rowSorter = new TableRowSorter<>(table.getModel());
        table.setRowSorter(rowSorter);

        jtfSearch.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                String text = jtfSearch.getText();
                if (text.trim().length() == 0) {
                    rowSorter.setRowFilter(null);
                } else {
                    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
                }
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                String text = jtfSearch.getText();
                if (text.trim().length() == 0) {
                    rowSorter.setRowFilter(null);
                } else {
                    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text));
                }
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
            }
        });

        //  design
        table.getTableHeader().setFont(new Font("Arial", Font.BOLD, 14));
        table.getTableHeader().setPreferredSize(new Dimension(100, 50));
        table.setRowHeight(50);
        table.validate();
        table.repaint();
        
        JScrollPane scroll = new JScrollPane();
        scroll.getViewport().add(table);
        scroll.setPreferredSize(new Dimension(1350, 400));
        jpnView.removeAll();
        jpnView.setLayout(new CardLayout());
        jpnView.add(scroll);
        jpnView.validate();
        jpnView.repaint();
    }

}

Để tùy chỉnh độ rộng các cột bạn có thể thiết lập bởi thuộc tính setMaxWidth(), setMinWidth()

table.getColumnModel().getColumn(1).setMaxWidth(80);
table.getColumnModel().getColumn(1).setMinWidth(80);
table.getColumnModel().getColumn(1).setPreferredWidth(80);

Lớp HocVienJPanel.java gọi đến controller xử lý:

package com.teamvietdev.qlhv.view;

import com.teamvietdev.qlhv.controller.QuanLyHocVienController;

/**
 *
 * @author TVD
 */
public class HocVienJPanel extends javax.swing.JPanel {

    public HocVienJPanel() {
        initComponents();
        
        QuanLyHocVienController controller = new QuanLyHocVienController(
                jpnView, btnAdd, jtfSearch);
        controller.setDataToTable();
    }

}

Kết quả sau khi thực hiện có thể như sau:

Lập trình Java Swing với ứng dụng quản lý học viên

Cấu trúc thư mục toàn bộ ứng dụng thiết kế như sau:

Lập trình Java Swing với ứng dụng quản lý học viên

Như vậy thông qua những phần hướng dẫn trên mong rằng bạn có thể tìm hiểu dễ dàng và nhanh chóng hơn về lập trình Java Swing, có thể xây dựng một dự án hoàn chỉnh để hoàn thành báo cáo môn học hoặc luận văn tốt nghiệp.

Xem hướng dẫn thực hiện chi tiết tại đây:

Tải mã nguồn hướng dẫn lập trình Java Swing với ứng dụng quản lý học viên phần 5 tại đây: http: //123link. vip/teamvietdevQLHV05

Lời kết: Trong thời gian tới Team Việt Dev sẽ tiếp tục ra mắt nhiều nội dung khác liên quan đến Java Swing miễn phí đến bạn đọc, các bạn nhớ theo dõi kênh để có được những chia sẻ mới nhất.

(Tác giả: Team Việt Dev)

Bình luận