Menu trong Java Swing (Bài 4)

Menu trong java swing. Một hệ thống menu cung cấp một thanh menu (Menu Bar) bên dưới thanh tiêu đề của cửa sổ. Thanh menu này chứa nhiều item và được gọi là Menu. Khi chúng ta click vào một menu, nó sẽ hiện ra và hiển thị các lựa chọn khác nhau và được gọi là Menu Item.

Khi chúng ta click chuột phải (right-click) trên màn hình, một Menu chứa các Menu Item xuất hiện bên cạnh nơi mà chúng ta nhấp chuột và được gọi là Popup Menu. Hình bên dưới là một ví dụ về Menu trong java swing.

menu trong java swing 1

Menu trong java swing – JMenuBar

JMenuBar là một class và được sử dụng để tạo một thanh menu. Một thanh menu chứa một hoặc nhiều item, ví dụ File, Edit, View, …

Tạo menu bar trong NetBeans

menu trong java swing 2

Lưu ý: Mặc định sẽ có 2 Menu được tạo là File và Edit.

Menu trong java swing – JMenu

JMenu là một class được sử dụng để tạo một menu trên thanh menu. Khi chúng ta click vào JMenu, nó sẽ hiển thị một hoặc nhiều item. Và để thêm JMenu vào JMenuBar, chúng ta sử dụng phương thức add() của lớp JMenuBar.

Tạo menu trong NetBeans

menu trong java swing 3

Thay đổi text cho Menu

menu trong java swing 4

Menu trong java swing – JMenuItem

JMenuItem là một class được sử dụng để tạo ra một item và gắn vào JMenu. Khi người dùng click vào một menu item, nó sẽ phát sinh một sự kiện là performed. Điều này tương tự như JButton mà chúng ta đã được tìm hiểu ở bài học giới thiệu về Swing.

Tạo menu item trong NetBeans

menu trong java swing 5

Tuỳ chỉnh menu item

menu trong java swing 6

Lưu ý chúng ta có thể tạo sub menu bằng cách trong menu gắn thêm menu khác. Hình bên dưới là một ví dụ

menu trong java swing 7

Đăng ký sự kiện cho Menu item (Cách đăng ký được thực hiện tương tự như Button)

menu trong java swing 25

Menu trong java swing – JPopupMenu

JPopupMenu là menu được xuất hiện khi người dùng right click vào một container như JFrame, JPanel, … Trong JPopupMenu cũng chứa các menu item cho phép người dùng lựa chọn.

Tạo popup menu trong NetBeans

menu trong java swing 8

Trong cửa sổ Navigator xuất hiện JPopupMenu

menu trong java swing 9

Thiết kế popup menu

menu trong java swing 10

Đăng ký và xử lý sự kiện cho popup menu

menu trong java swing 11

Viết xử lý cho phương thức formMouseReleased mà NetBeans đã phát sinh code

private void formMouseReleased(java.awt.event.MouseEvent evt) { 
 if(evt.isPopupTrigger()) {
    jPopupMenu2.show(this, evt.getX(), evt.getY());
 }
}

Lưu ý jPopupMenu2 là tên của JPopupMenu mà chúng ta đã tạo trong quá trình thiết kế

Khi chạy ứng dụng và right click vào một vị trí bất kỳ trong JFrame, chúng ta sẽ thấy kết quả như hình sau

menu trong java swing 12

Đăng ký sự kiện cho Menu item: thực hiện tương tự như Button

Menu trong java swing – JToolBar

JToolBar thì tương tự như menu bar và chứa nhiều JButton hoặc các thành phần swing khác. Hình bên dưới là cách tạo tool bar trong NetBeans

menu trong java swing 13

Thiết lập icon cho button trong tool bar

menu trong java swing 14

Các bạn có thể tải bộ icon cho button

Menu trong java swing – JFileChooser

Một JFileChooser là một hộp thoại chuẩn được sử dụng để cho phép người dùng lựa chọn một thư mục hoặc một tập tin. Có 3 loại hộp thoại tương ứng với 3 phương thức của lớp JFileChooser được liệt kê trong bảng sau

Phương thức Hộp thoại
public int showSaveDialog(Component parent) Lưu file
public int showOpenDialog(Component parent) Mở file
public int showDialog(Component parent, String approveButtonLabel) Được phép tuỳ chỉnh cho nút OK

Xử lý mẫu cho hộp thoại lưu file (showSaveDialog)

(Lưu ý thay phần in đậm màu đỏ thành nội dung mà bạn muốn lưu xuống file)

private void saveAction() {
 JFileChooser jfc = new JFileChooser();
 int ret = jfc.showSaveDialog(this);
 File f = null;

 if (ret == JFileChooser.APPROVE_OPTION) {
   f = jfc.getSelectedFile();
 } else {
   return;
 }

 try {
 
   FileWriter fw = new FileWriter(f);
   fw.write("Nội dung mà chúng ta muốn lưu");
 
   fw.flush();
   fw.close();
 
   JOptionPane.showMessageDialog(this, "Saved data successfully");
 } catch (Exception ex) {
   JOptionPane.showMessageDialog(this, ex.toString());
 }
}

Xử lý mẫu cho hộp thoại mở file (showOpenDialog)

(Lưu ý dữ liệu sau khi đọc từ file đang được chứa trong biến data, phần in đậm màu đỏ)

private void openAction() {
 JFileChooser jfc = new JFileChooser();
 int ret = jfc.showOpenDialog(this);
 File f = null;

 if (ret == JFileChooser.APPROVE_OPTION) {
   f = jfc.getSelectedFile();
 } else {
   return;
 }

 try {
 
   FileReader fr = new FileReader(f);
   BufferedReader br = new BufferedReader(fr);
   String data = br.readLine();
 
   fr.close();
   br.close();
 
 } catch (Exception ex) {
   JOptionPane.showMessageDialog(this, ex.toString());
 }
}

Menu trong java swing – Bài tập thực hành

Câu 1: Thiết kế giao diện ứng dụng

menu trong java swing 15

File menu

menu trong java swing 16

Setting menu

menu trong java swing 17

Help menu

menu trong java swing 18

Câu 2: Viết xử lý

2.1. Khi người dùng chọn Open menu, hiển thị hộp thoại cho phép người dùng chọn một tập tin txt và đọc nội dung tập tin đó hiển thị ra màn hình

menu trong java swing 19

menu trong java swing 20

2.2. Khi người dùng chọn Exit menu, ứng dụng sẽ bị đóng (Ứng dụng sẽ hiển thị hộp thoại xác nhận hay không còn tuỳ thuộc vào Confirm exit menu có được chọn?)

2.3. Popup menu cho phép người dùng thiết lập màu chữ và đóng ứng dụng

menu trong java swing 21

2.4. Khi người dùng chọn nút “Save“, ứng dụng sẽ hiển thị hộp thoại cho phép người dùng lựa chọn nơi lưu tập tin.

menu trong java swing 22

2.5 Xử lý tool bar

menu trong java swing 23

Hộp thoại xác nhận khi đóng ứng dụng. Ứng dụng sẽ bị đóng nếu người dùng chọn Yes.

menu trong java swing 24

2.6. Xử lý cho Setting menu

Confirm exit, RedBlue xử lý tương tự như Confirm exit của tool barRed/Blue của popup menu