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

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 4 nhằm hướng dẫn thiết kế giao diện trong Java Swing.

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

Thiết kế giao diện với ứng dụng quản lý học viên trong Java Swing trong đó bố cục chính sẽ được chia làm 2 phần. Khung tác vụ bên trái sẽ là chứa các danh mục quản lý, khung tác vụ bên phải sẽ chứa nội dung hiển thị tương ứng từng danh mục được lựa chọn.

1. Khởi tạo giao diện màn hình chính

Bước 1: Tạo một JFrame trong gói view

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

Đặt tên là MainJFrame.java

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

Tại MainJFrame.java nếu như đang ở mục Source thì bạn chuyển qua mục Design để tiến hành thiết kế bố cục cho giao diện chương trình. Bên góc phải tại mục Palette chứa các Swing Containers, Swing Controls… dùng để thiết kế giao diện như nút nhấn, khung nhập dữ liệu. Mục Properties dùng để thay đổi các thuộc tính của đối tượng như chỉnh màu sắc, kiểu chữ, kích thước…

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

Bạn chỉ cần chọn Swing  Containers, Swing Controls… phù hợp sau đó kéo thả vào mục Design.

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

2. Tạo danh mục quản lý

Bây giờ chúng ta sẽ thiết kế giao diện cho phần menu bên trái màn hình, khi người dùng nhấn vào menu nào sẽ hiển thị dữ liệu ở nội dung tương ứng bên phải màn hình.

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

Như hình trên chúng ta cần tạo 2 Panel, Panel số 1 sẽ hiển thị danh mục và Panel số 2 sẽ hiển thị dữ liệu. Phần dấu mũi tên sẽ giúp bạn canh chỉnh kích thước tự co dãn có thể ngang hay dọc theo kích thước màn hình.

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

Với mỗi danh mục bạn cần tạo một Panel trong đó sẽ chứa một Label. Label chúng ta sẽ thiết lập các thuộc tính như là màu sắc, kích thước chữ, hình ảnh.

3. Xử lý sự kiện

Bạn cần tạo một số Panel như TrangChuPanel, HocVienPanel, LopHocPanel, ThongKePanel trong gói view bằng cách chuột phải chọn mục New > JPanel Form…

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

Trong gói bean bạn tạo lớp DanhMucBean.java gồm một số trường sau để nhằm hỗ trợ xử lý bắt sự kiện khi nhấn vào mỗi Label.

Lớp DanhMucBean.java

package com.teamvietdev.qlhv.bean;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class DanhMucBean {

    private String kind;
    private JPanel jpn;
    private JLabel jlb;

    public DanhMucBean() {
    }

    public DanhMucBean(String kind, JPanel jpn, JLabel jlb) {
        this.kind = kind;
        this.jpn = jpn;
        this.jlb = jlb;
    }

    public String getKind() {
        return kind;
    }

    public void setKind(String kind) {
        this.kind = kind;
    }

    public JPanel getJpn() {
        return jpn;
    }

    public void setJpn(JPanel jpn) {
        this.jpn = jpn;
    }

    public JLabel getJlb() {
        return jlb;
    }

    public void setJlb(JLabel jlb) {
        this.jlb = jlb;
    }

}

Tiếp theo bạn cần tạo mới lớp ChuyenManHinhController.java trong gói controller để xử lý chuyển qua lại các màn hình với nhau.

Khi vào ứng dụng thì sẽ hiển thị mặc định TrangChinhPanel

public void setDashboard(JPanel jpnItem, JLabel jlbItem) {
       kindSelected = "TrangChinh";
       jpnItem.setBackground(new Color(96, 100, 191));
       jlbItem.setBackground(new Color(96, 100, 191));
       JPanel node = new TrangChinhJPanel();
       jpbView.removeAll();
       jpbView.setLayout(new BorderLayout());
       jpbView.add(node);
       jpbView.validate();
       jpbView.repaint();
}

Hàm xử lý sự kiện khi nhấn vào Label bao gồm sự kiện nhấn chuột, di chuyển chuột vào và ra khỏi Label sẽ thay đổi màu nền của Panel.

public void setEvent(List<DanhMucBean> listDanhMuc) {
     this.listDanhMuc = listDanhMuc;
     for (DanhMucBean item : listDanhMuc) {
           item.getJlb().addMouseListener(new LabelEvent(item.getKind(), item.getJpn(), item.getJlb()));
     }
}

class LabelEvent implements MouseListener {

      private JPanel node;
      private String kind;

      private JPanel jpnItem;
      private JLabel jlbItem;

      public LabelEvent(String kind, JPanel jpnItem, JLabel jlbItem) {
           this.kind = kind;
           this.jpnItem = jpnItem;
           this.jlbItem = jlbItem;
      }

      @Override
      public void mouseClicked(MouseEvent e) {
            switch (kind) {
                case "TrangChinh":
                    node = new TrangChinhJPanel();
                    break;
                case "HocVien":
                    node = new HocVienJPanel();
                    break;
                // more
                default:
                    break;
           }
           jpbView.removeAll();
           jpbView.setLayout(new BorderLayout());
           jpbView.add(node);
           jpbView.validate();
           jpbView.repaint();
           setChangeBackground(kind);
      }

      @Override
      public void mousePressed(MouseEvent e) {
           kindSelected = kind;
           jpnItem.setBackground(new Color(96, 100, 191));
           jlbItem.setBackground(new Color(96, 100, 191));
      }

      @Override
      public void mouseReleased(MouseEvent e) {

      }

      @Override
      public void mouseEntered(MouseEvent e) {
          jpnItem.setBackground(new Color(96, 100, 191));
          jlbItem.setBackground(new Color(96, 100, 191));
      }

      @Override
      public void mouseExited(MouseEvent e) {
          if (!kindSelected.equalsIgnoreCase(kind)) {
                jpnItem.setBackground(new Color(76, 175, 80));
                jlbItem.setBackground(new Color(76, 175, 80));
          }
      }

}

Trong MainJFrame.java bạn thêm đoạn mã gọi đến ChuyenManHinhController.java xử lý:

package com.teamvietdev.qlhv.view;

import com.teamvietdev.qlhv.bean.DanhMucBean;
import com.teamvietdev.qlhv.controller.ChuyenManHinhController;
import java.util.ArrayList;
import java.util.List;

public class MainJFrame extends javax.swing.JFrame {

    public MainJFrame() {
        initComponents();
        setTitle("QUẢN LÝ HỌC VIÊN");

        List<DanhMucBean> listDanhMuc = new ArrayList<>();
        listDanhMuc.add(new DanhMucBean("TrangChinh", jpnTrangChu, jlbTrangChu));
        listDanhMuc.add(new DanhMucBean("HocVien", jpnHocVien, jlbHocVien));

        ChuyenManHinhController controller = new ChuyenManHinhController(jpnView);
        controller.setDashboard(jpnTrangChu, jlbTrangChu);
        controller.setEvent(listDanhMuc);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainJFrame().setVisible(true);
            }
        });
    }
                 
}

Như vậy sau khi hoàn thành các bước trên ta được phần tạo danh mục 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 4 tại đây: http ://123link. vip/teamvietdevQLHV04

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)

5 Comments

  1. Phạm tuấn cường 26/06/2020 Reply
  2. Lê Bảo 29/06/2020 Reply
  3. DuyCauGiay 02/01/2021 Reply
  4. Hoàn 09/06/2021 Reply
  5. Nguyễn Chiến 18/02/2023 Reply

Bình luận