Java Swing, là một bức tranh tuyệt vời của sự sáng tạo trong lập trình giao diện người dùng, đã mở ra cánh cửa cho những ứng dụng Java trở nên linh hoạt và hấp dẫn. Đối với những người muốn chinh phục thế giới đồ họa của Java, hành trình bắt đầu từ việc hiểu rõ về Java Swing. Hãy cùng nhau khám phá khung pháp này và hướng dẫn tự học lập trình cơ bản với Java Swing, nơi năng lực kỹ thuật và sự sáng tạo hội tụ, để tạo ra những ứng dụng với giao diện người dùng tuyệt vời và chức năng đầy ấn tượng.

Java Swing là gì?

Java Swing là một bộ công cụ GUI (Graphical User Interface) được phát triển bởi Sun Microsystems, sau này là Oracle Corporation, để xây dựng giao diện người dùng cho ứng dụng Java. Nó là một phần của Java Foundation Classes (JFC) và cung cấp các thành phần giao diện đồ họa như cửa sổ, nút, ô văn bản, và nhiều thành phần khác, giúp phát triển ứng dụng Java trở nên linh hoạt và dễ dàng.

Java Swing được thiết kế để thay thế AWT (Abstract Window Toolkit) trong việc xây dựng giao diện người dùng Java. Nó mang lại nhiều lợi ích như đa nền tảng, giao diện người dùng đẹp mắt, và khả năng tùy chỉnh cao. Bởi vì Swing là một phần của thư viện Java, nó có sẵn trên nhiều hệ điều hành, từ Windows đến Linux và macOS.

Ứng dụng của Java Swing

Java Swing đã được sử dụng rộng rãi trong việc phát triển ứng dụng giao diện người dùng đa dạng trên nền tảng Java. Dưới đây là một số ứng dụng quan trọng của Java Swing:

1. Ứng dụng Desktop:

Trình soạn thảo văn bản: Java Swing được sử dụng để phát triển các trình soạn thảo văn bản với giao diện người dùng linh hoạt.

Trình duyệt file: Các ứng dụng quản lý file và thư mục sử dụng giao diện của Java Swing để hiển thị danh sách và thao tác với các tệp tin.

2. Ứng dụng Quản lý Dữ liệu:

Hệ thống quản lý cơ sở dữ liệu (DBMS): Java Swing được tích hợp vào các ứng dụng quản lý cơ sở dữ liệu, giúp người dùng tương tác và quản lý dữ liệu một cách thuận tiện.

3. Ứng dụng Trò chơi:

Trò chơi đơn giản: Java Swing có thể được sử dụng để phát triển các trò chơi nhỏ và đơn giản với giao diện người dùng đẹp mắt.

4. Ứng dụng Khoa học và Toán học:

Ứng dụng vẽ đồ thị: Java Swing thường được sử dụng trong việc tạo các ứng dụng vẽ đồ thị và biểu đồ cho mục đích khoa học và toán học.

5. Ứng dụng Hệ thống Quản lý:

Phần mềm quản lý dự án: Java Swing có thể giúp xây dựng các giao diện người dùng cho các ứng dụng quản lý dự án với các tính năng như theo dõi tiến độ, quản lý tài nguyên, và thống kê.

6. Ứng dụng Di động:

Ứng dụng di động với Java ME (Micro Edition): Java Swing có thể được tích hợp vào ứng dụng di động, mang lại trải nghiệm giao diện người dùng đồng nhất trên cả các thiết bị khác nhau.

7. Ứng dụng Internet và Web:

Trình duyệt nhẹ: Một số trình duyệt nhẹ sử dụng Java Swing để hiển thị nội dung web và cung cấp các tính năng tương tác.

8. Ứng dụng Kinh doanh và Tài chính:

Phần mềm quản lý tài chính: Java Swing được sử dụng để phát triển các ứng dụng quản lý tài chính cá nhân và doanh nghiệp.

Java Swing đã chứng minh sức mạnh của mình trong nhiều lĩnh vực ứng dụng khác nhau, từ desktop đến di động và web, tạo ra những giao diện người dùng linh hoạt và mạnh mẽ.

Sự khác biệt giữa AWT và Swing

Abstract Window Toolkit (AWT) và Swing là hai bộ công cụ GUI (Graphical User Interface) của Java, được sử dụng để phát triển giao diện người dùng trong ứng dụng Java. Dưới đây là một số sự khác biệt quan trọng giữa AWT và Swing:

1. Kiến trúc:

AWT: Sử dụng các thành phần giao diện người dùng được hệ điều hành cung cấp (native components). Ví dụ, nút, ô văn bản, và cửa sổ được lấy từ hệ thống mục tiêu.

Swing: Sử dụng các thành phần được xây dựng hoàn toàn bằng Java và không phụ thuộc vào thành phần native của hệ điều hành.

2. Độ độc lập đa nền tảng:

AWT: Có thể phụ thuộc vào tính chất native của thành phần giao diện người dùng, điều này có thể dẫn đến sự không nhất quán giữa các nền tảng.

Swing: Độc lập đa nền tảng hoàn toàn, giúp đảm bảo giao diện người dùng đồng nhất trên mọi hệ điều hành.

3. Tùy chỉnh và Nâng cao:

AWT: Cung cấp khả năng tùy chỉnh nhưng có hạn chế so với Swing. Sự tùy chỉnh chủ yếu dựa trên khả năng của thành phần native.

Swing: Có khả năng tùy chỉnh cao, với khả năng định rõ giao diện người dùng thông qua các Look and Feel (LAF), cũng như khả năng tạo ra các thành phần mới hoặc mở rộng các thành phần sẵn có.

4. Hiệu suất:

AWT: Thường có hiệu suất tốt hơn trên một số hệ điều hành vì sử dụng các thành phần native.

Swing: Có thể đôi khi yêu cầu tài nguyên hệ thống cao hơn vì sử dụng các thành phần do chính Java xây dựng.

5. Khả năng Tương tác và Sự kiện:

AWT: Sử dụng sự kiện và xử lý sự kiện giống như Swing, nhưng không có sự kiện tiện ích như ActionEvent, ActionListeners như trong Swing.

Swing: Cung cấp sự kiện tiện ích mạnh mẽ, giúp quản lý và xử lý sự kiện dễ dàng hơn.

6. Thư viện và Sự Mở rộng:

AWT: Cung cấp một số lượng hạn chế các thành phần giao diện người dùng.

Swing: Bao gồm một thư viện phong phú các thành phần giao diện người dùng và hỗ trợ cho việc mở rộng và tạo ra các thành phần tùy chỉnh.

Tóm lại, trong khi AWT tập trung vào sự tích hợp với thành phần native, Swing mang lại sự độc lập đa nền tảng và khả năng tùy chỉnh cao hơn. Sự chọn lựa giữa AWT và Swing thường phụ thuộc vào yêu cầu cụ thể của ứng dụng và mức độ kiểm soát mong muốn đối với giao diện người dùng.

Cấu trúc phân cấp lớp Java Swing

Java Swing sử dụng cấu trúc phân cấp lớp để xây dựng các thành phần giao diện người dùng. Cấu trúc này giúp tổ chức mã nguồn và cung cấp sự linh hoạt cho việc mở rộng và tùy chỉnh các thành phần. Dưới đây là một số lớp quan trọng trong cấu trúc phân cấp lớp của Java Swing:

1. JComponent:

Là lớp cơ sở cho hầu hết các thành phần giao diện người dùng Swing.

Bao gồm các phương thức và thuộc tính chung như vị trí, kích thước, và sự kiện.

2. Container:

Mở rộng từ lớp JComponent.

Là lớp cơ sở cho các thành phần có thể chứa các thành phần khác, như JPanel, JScrollPane, và JFrame.

3. JPanel:

Là một lớp con của Container.

Được sử dụng để nhóm và tổ chức các thành phần con.

4. JWindow và JFrame:

JWindow và JFrame là lớp con của Container.

JFrame được sử dụng để tạo cửa sổ ứng dụng chính.

JWindow là lớp chủ yếu để tạo các cửa sổ phụ, thông thường không có thanh tiêu đề và các thành phần khác của cửa sổ.

5. JButton, JLabel, JTextField:

Đây là các lớp con của JComponent được sử dụng để tạo các thành phần cơ bản như nút, nhãn, và ô văn bản.

6. Layout Managers:

Các quản lý bố trí như FlowLayout, BorderLayout, và GridLayout là các lớp chịu trách nhiệm quyết định cách các thành phần được sắp xếp trên giao diện.

7. Event Handling:

EventObject là lớp cơ sở cho các sự kiện.

EventListener là một giao diện đánh dấu các lớp có khả năng xử lý sự kiện.

Các lớp như ActionEvent, MouseEvent, và KeyEvent là các lớp con của EventObject đại diện cho các loại sự kiện khác nhau.

8. SwingUtilities và EventQueue:

SwingUtilities cung cấp các tiện ích hỗ trợ cho việc làm việc với Swing, chẳng hạn như chuyển đổi giữa các luồng và xác định cửa sổ chính.

EventQueue quản lý hàng đợi sự kiện và đảm bảo rằng sự kiện được xử lý trong luồng sự kiện của Swing.

9. Look and Feel (LAF):

LookAndFeel là một lớp trừu tượng đại diện cho giao diện người dùng của ứng dụng.

UIManager quản lý cài đặt và chuyển đổi giữa các giao diện người dùng khác nhau.

Cấu trúc phân cấp lớp Java Swing

Cấu trúc phân cấp lớp trong Java Swing cung cấp một cơ sở linh hoạt và mở rộng, cho phép nhà phát triển tùy chỉnh và xây dựng các thành phần giao diện người dùng phức tạp.

Các phương thức được sử dụng phổ biến của Component Class

Dưới đây là một bảng gồm các phương thức phổ biến của lớp Component trong Java Swing, cùng với mục đích của mỗi phương thức.

Phương thứcMục đích
void setLocation(int x, int y)Đặt vị trí của thành phần trên giao diện dựa trên tọa độ x và y.
void setSize(int width, int height)Đặt kích thước của thành phần theo chiều rộng (width) và chiều cao (height).
void setVisible(boolean visible)Đặt trạng thái hiển thị của thành phần, có thể là true (hiển thị) hoặc false (ẩn).
void setEnabled(boolean enabled)Đặt trạng thái hoạt động của thành phần, có thể là true (hoạt động) hoặc false (vô hiệu hóa).
void setBackground(Color color)Đặt màu nền của thành phần.
void setForeground(Color color)Đặt màu văn bản hoặc đường viền của thành phần.
void setFont(Font font)Đặt font chữ cho thành phần.
void setToolTipText(String text)Đặt văn bản hiển thị khi di chuột qua thành phần (tooltip).
void setBorder(Border border)Đặt đường viền cho thành phần, giúp tạo ra các hiệu ứng đồ họa.
void addMouseListener(MouseListener listener)Thêm một lắng nghe sự kiện chuột cho thành phần.
void addActionListener(ActionListener listener)Thêm một lắng nghe sự kiện hành động (ví dụ: nhấn nút) cho thành phần.
void repaint()Yêu cầu hệ thống vẽ lại thành phần, thường được gọi khi có thay đổi cần cập nhật trên giao diện.
void revalidate()Yêu cầu hệ thống kiểm tra lại kích thước và bố trí của thành phần, thường được gọi khi có thay đổi cấu trúc giao diện.

Lưu ý rằng các phương thức này là một phần của lớp Component, lớp cơ sở cho hầu hết các thành phần giao diện người dùng trong Java Swing. Các thành phần cụ thể như JButton, JLabel, và JTextField là các lớp con của Component và có thể có các phương thức và thuộc tính riêng.

Ví dụ đơn giản về lập trình Java Swing

Dưới đây là một số ví dụ đơn giản giúp bạn bắt đầu với lập trình GUI bằng Java Swing. Hãy thử các ví dụ này để làm quen với cú pháp và các thành phần cơ bản của Swing:

1. JButton Class – Lớp JButton

Trong Java Swing, JButton là một thành phần chính để tạo nút trong giao diện người dùng. Nó giúp tạo ra một nút có thể được nhấn và thực hiện các hành động cụ thể khi người dùng tương tác với nó.

Khi tạo một đối tượng JButton, bạn có thể chỉ định một văn bản hoặc hình ảnh làm nội dung của nút. Ngoài ra, JButton hỗ trợ sử dụng ActionListener, một giao diện sự kiện, để xử lý các hành động khi nút được nhấn.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class ButtonExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Button Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        // Tạo một JButton với văn bản "Click Me"
        JButton button = new JButton("Click Me");
 
        // Thêm ActionListener để xử lý sự kiện khi nút được nhấn
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "Button Clicked!");
            }
        });
 
        // Thêm JButton vào JFrame
        frame.getContentPane().add(button);
 
        // Thiết lập kích thước và hiển thị JFrame
        frame.setSize(600, 600);
        frame.setVisible(true);
    }
}

Ở đây, chúng ta đã tạo một JButton với văn bản “Click Me” và thêm một ActionListener để xử lý sự kiện khi nút được nhấn. Khi nút được nhấn, một hộp thoại thông báo sẽ xuất hiện. Điều này là một ví dụ cơ bản về cách sử dụng JButton và ActionListener để tạo và xử lý nút trong Java Swing.

Kết quả khi chạy đoạn mã ví dụ về JButton.
Kết quả khi click vào “Click Me”

2. JTextField Class – Lớp JTextField

Trong Java Swing, JTextField là một thành phần được thiết kế để nhập và chỉnh sửa dữ liệu dạng văn bản trên giao diện người dùng. JTextField kế thừa từ lớp JTextComponent, cung cấp khả năng nhập liệu dòng đơn và làm cho nó trở thành một công cụ linh hoạt cho việc nhập liệu văn bản ngắn.

Dưới đây là một ví dụ đơn giản về cách sử dụng JTextField để nhập liệu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.FlowLayout;
 
public class TextFieldExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Text Field Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        // Tạo một JTextField với độ dài ban đầu là 20 ký tự
        JTextField textField = new JTextField(20);
 
        // Tạo một nút để in ra giá trị của JTextField khi được nhấn
        JButton button = new JButton("Print Text");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String text = textField.getText();
                JOptionPane.showMessageDialog(frame, "Entered Text: " + text);
            }
        });
 
        // Thêm JTextField và JButton vào JFrame
        frame.getContentPane().add(textField);
        frame.getContentPane().add(button);
 
        // Thiết lập bố trí sử dụng FlowLayout
        frame.setLayout(new FlowLayout());
 
        // Thiết lập kích thước và hiển thị JFrame
        frame.setSize(600, 600);
        frame.setVisible(true);
    }
}

Trong ví dụ trên, JTextField có thể nhập liệu dòng đơn, và giá trị nhập liệu có thể được truy xuất và xử lý khi người dùng nhấn nút. Điều này làm cho JTextField trở thành một thành phần quan trọng trong việc nhập liệu văn bản trong ứng dụng Java Swing.

Kết quả khi chạy đoạn mã ví dụ về JTextField.
Kết quả khi nhập vào TextField và click vào “Print Text”.

3. JScrollBar Class – lớp JScrollBar

JScrollBar là một thành phần trong Java Swing được sử dụng để tạo thanh cuộn để điều chỉnh giá trị, đặc biệt là khi bạn có một phần nội dung lớn và muốn di chuyển nhanh chóng hoặc chọn giá trị cụ thể.

Dưới đây là một ví dụ về cách sử dụng JScrollBar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import javax.swing.*;
import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
 
public class ScrollBarExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Custom ScrollBar Example");
 
        // Tạo một JScrollBar theo chiều ngang
        JScrollBar horizontalScrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
        horizontalScrollBar.setBounds(10, 510, 550, 20);
 
        // Tạo một JScrollBar theo chiều dọc
        JScrollBar verticalScrollBar = new JScrollBar(JScrollBar.VERTICAL);
        verticalScrollBar.setBounds(560, 10, 20, 520);
 
        // Tạo một JLabel để hiển thị giá trị của thanh cuộn ngang
        JLabel horizontalLabel = new JLabel("Horizontal Value (Giá trị thanh cuộn ngang): 0");
        horizontalLabel.setBounds(10, 480, 500, 20);
 
        // Tạo một JLabel để hiển thị giá trị của thanh cuộn dọc
        JLabel verticalLabel = new JLabel("Vertical Value (Giá trị thanh cuộn dọc): 0");
        verticalLabel.setBounds(10, 460, 500, 20);
 
 
        // Thêm AdjustmentListener để theo dõi sự kiện thay đổi giá trị của thanh cuộn ngang
        horizontalScrollBar.addAdjustmentListener(e -> {
            int value = horizontalScrollBar.getValue();
            horizontalLabel.setText("Horizontal Value (Giá trị thanh cuộn ngang): " + value);
        });
 
        // Thêm AdjustmentListener để theo dõi sự kiện thay đổi giá trị của thanh cuộn dọc
        verticalScrollBar.addAdjustmentListener(e -> {
            int value = verticalScrollBar.getValue();
            verticalLabel.setText("Vertical Value (Giá trị thanh cuộn dọc): " + value);
        });
 
        // Thêm JScrollBar và JLabel vào JFrame
        frame.add(horizontalScrollBar);
        frame.add(verticalScrollBar);
        frame.add(horizontalLabel);
        frame.add(verticalLabel);
 
        // Thiết lập bố trí sử dụng null layout
        frame.setLayout(null);
 
        // Thiết lập kích thước và hiển thị JFrame
        frame.setSize(600, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Đoạn mã này giúp bạn hiểu cách sử dụng JScrollBar và AdjustmentListener trong Java Swing để tạo và theo dõi sự kiện của thanh cuộn ngang và dọc. Những thông tin này rất hữu ích khi bạn muốn tạo các giao diện có thể cuộn trong ứng dụng của mình.

Kết quả khi chạy đoạn mã ví dụ về JScrollBar.

4. JPanel Class – Lớp JPanel

JPanel là một lớp trong thư viện Java Swing, được sử dụng để tạo và quản lý một khu vực nhỏ trong giao diện người dùng. Nó là một thành phần Swing linh hoạt, thường được sử dụng để chứa và tổ chức các thành phần khác như nút, nhãn, hoặc các thành phần tùy chỉnh khác.

Dưới đây là một ví dụ đơn giản về cách sử dụng lớp JPanel trong một ứng dụng Java Swing:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.swing.*;
import java.awt.*;
 
public class JPanelExample {
    public static void main(String[] args) {
        // Tạo JFrame
        JFrame frame = new JFrame("JPanel Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
 
        // Tạo JPanel
        JPanel panel = new JPanel();
 
        // Thêm các thành phần vào JPanel
        JButton button = new JButton("Click Me");
        JLabel label = new JLabel("Hello, JPanel!");
 
        panel.add(button);
        panel.add(label);
 
        // Thêm JPanel vào JFrame
        frame.getContentPane().add(panel);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}

Trong ví dụ trên:

  • Một JFrame được tạo để chứa ứng dụng.
  • Một JPanel được tạo để chứa các thành phần khác.
  • Một nút và một nhãn được thêm vào JPanel.
  • JPanel sau đó được thêm vào JFrame.
  • Cuối cùng, JFrame được hiển thị.

Lớp JPanel cung cấp một phương thức linh hoạt để tổ chức và sắp xếp các thành phần trong giao diện người dùng. Nó có thể được sử dụng để nhóm và quản lý thành phần một cách hiệu quả.

Kết quả khi chạy đoạn mã ví dụ về JPanel.

5. JMenu Class – Lớp JMenu

JMenu là một lớp trong thư viện Java Swing, được sử dụng để tạo và quản lý một menu trong giao diện người dùng. Menu là một phần quan trọng của một ứng dụng GUI, cung cấp cách tiếp cận dễ dàng đến các chức năng và tùy chọn khác nhau của ứng dụng.

Dưới đây là một ví dụ về việc tạo một menu 3 cấp sử dụng JMenu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class ThreeLevelMenuExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Three-Level Menu Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Tạo menu bar
        JMenuBar menuBar = new JMenuBar();
 
        // Tạo menu cấp 1
        JMenu fileMenu = new JMenu("File");
 
        // Tạo menu cấp 2
        JMenu subMenu1 = new JMenu("Submenu 1");
        JMenu subMenu2 = new JMenu("Submenu 2");
 
        // Tạo menu cấp 3
        JMenuItem menuItem1 = new JMenuItem("Item 1");
        JMenuItem menuItem2 = new JMenuItem("Item 2");
        JMenuItem menuItem3 = new JMenuItem("Item 3");
 
        // Thêm các menu cấp 3 vào menu cấp 2
        subMenu1.add(menuItem1);
        subMenu1.add(menuItem2);
        subMenu2.add(menuItem3);
 
        // Thêm các menu cấp 2 vào menu cấp 1
        fileMenu.add(subMenu1);
        fileMenu.add(subMenu2);
 
        // Thêm menu cấp 1 vào menu bar
        menuBar.add(fileMenu);
 
        // Thêm menu bar vào JFrame
        frame.setJMenuBar(menuBar);
 
        // Hiển thị JFrame
        frame.setVisible(true);
 
        // Xử lý sự kiện khi một menu item được chọn
        menuItem1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "Item 1 selected!");
            }
        });
 
        menuItem2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "Item 2 selected!");
            }
        });
 
        menuItem3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame, "Item 3 selected!");
            }
        });
    }
}

Trong ví dụ trên:

  • Một JMenuBar được tạo để chứa menu.
  • Một JMenu cấp 1 có tên là “File” được tạo.
  • Hai JMenu cấp 2 (Submenu 1 và Submenu 2) được tạo và thêm vào JMenu cấp 1.
  • Ba JMenuItem cấp 3 (Item 1, Item 2, và Item 3) được tạo và thêm vào các JMenu cấp 2 tương ứng.
  • Tất cả các JMenu và JMenuItem được thêm vào JMenuBar.
  • Cuối cùng, JMenuBar được thêm vào JFrame.

Khi chạy chương trình, bạn sẽ thấy một menu cấp 1 có tên “File” với hai menu cấp 2 và ba menu cấp 3. Khi bạn chọn một menu item cấp 3, một hộp thoại thông báo sẽ xuất hiện để thông báo rằng menu item đã được chọn.

Kết quả khi chạy đoạn mã ví dụ về JMenu.

6. JList Class – Lớp JList

JList là một lớp trong Java Swing được sử dụng để tạo và hiển thị danh sách dữ liệu. Nó cung cấp một cách linh hoạt để chọn một hoặc nhiều mục từ danh sách.

Dưới đây là một ví dụ đơn giản về cách sử dụng lớp JList:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JListExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JList Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Một mảng các mục để hiển thị trong JList
        String[] items = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
 
        // Tạo một JList từ mảng các mục
        JList list = new JList<>(items);
 
        // Tạo một JButton để hiển thị mục được chọn từ JList
        JButton showButton = new JButton("Show Selected Item");
 
        // Thêm ActionListener để xử lý sự kiện khi nút được nhấn
        showButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Lấy mục được chọn từ JList
                String selectedValue = list.getSelectedValue();
                JOptionPane.showMessageDialog(frame, "Selected Item: " + selectedValue);
            }
        });
 
        // Tạo một JScrollPane để hỗ trợ cuộn trong trường hợp danh sách quá dài
        JScrollPane scrollPane = new JScrollPane(list);
 
        // Thêm JList và JButton vào JFrame
        frame.add(scrollPane);
        frame.add(showButton);
 
        // Thiết lập bố trí sử dụng null layout
        frame.setLayout(null);
 
        // Đặt vị trí cho JList và JButton
        scrollPane.setBounds(10, 10, 150, 120);
        showButton.setBounds(180, 40, 120, 30);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}

Trong ví dụ trên:

  • Một mảng items chứa các mục sẽ được hiển thị trong JList.
  • Một JList được tạo từ mảng items.
  • Một JButton được tạo để hiển thị mục được chọn từ JList.
  • Sử dụng JScrollPane để hỗ trợ cuộn nếu danh sách quá dài.
  • Sự kiện ActionListener được thêm vào JButton để xử lý sự kiện khi nút được nhấn.
  • JList và JButton được thêm vào JFrame.

Khi bạn chạy chương trình, bạn sẽ thấy một cửa sổ chứa một JList và một nút. Bạn có thể chọn một hoặc nhiều mục từ danh sách và nhấn nút để hiển thị mục đã chọn.

Kết quả khi khởi chạy đoạn mã ví dụ về JList.
Kết quả khi chọn “Item 4” và sau đó click vào “Show Selected Item”.

7. JLabel Class – Lớp JLabel

JLabel trong Java Swing được sử dụng để hiển thị văn bản hoặc hình ảnh trong giao diện người dùng. Nó kế thừa từ lớp JComponent và cung cấp một phương tiện đơn giản để hiển thị thông tin tĩnh.

Dưới đây là một ví dụ đơn giản về cách sử dụng lớp JLabel để hiển thị văn bản trong một ứng dụng Java Swing:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import javax.swing.*;
 
public class JLabelExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JLabel Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Tạo một JLabel với văn bản
        JLabel label = new JLabel("Hello, I'm Nguyen Doan Chi Thuc!");
 
        // Đặt vị trí và kích thước cho JLabel
        label.setBounds(50, 50, 200, 30);
 
        // Thêm JLabel vào JFrame
        frame.add(label);
 
        // Thiết lập bố trí sử dụng null layout
        frame.setLayout(null);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}

Trong ví dụ trên:

  • Một JFrame được tạo để chứa ứng dụng.
  • Một JLabel được tạo với văn bản “Hello, Swing!”.
  • Vị trí và kích thước của JLabel được đặt sử dụng phương thức setBounds.
  • JLabel được thêm vào JFrame.
  • Bố trí của JFrame được thiết lập là null layout.
  • Cuối cùng, JFrame được hiển thị.

Lớp JLabel cũng có thể được sử dụng để hiển thị hình ảnh thông qua phương thức setIcon, và nó cung cấp nhiều tính năng khác như chọn màu sắc văn bản, căn chỉnh văn bản, và nhiều thuộc tính tùy chọn khác để tùy chỉnh ngoại hình.

Kết quả khi chạy đoạn mã ví dụ về JLabel.

8. JComboBox Class- Lớp JComboBox

JComboBox là một lớp trong Java Swing được sử dụng để tạo và quản lý một hộp chọn thả xuống. Nó cho phép người dùng chọn một mục từ danh sách các mục có sẵn.

Dưới đây là một ví dụ đơn giản về cách sử dụng lớp JComboBox:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JComboBoxExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("JComboBox Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Một mảng các mục để hiển thị trong JComboBox
        String[] items = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"};
 
        // Tạo một JComboBox từ mảng các mục
        JComboBox comboBox = new JComboBox<>(items);
 
        // Tạo một JLabel để hiển thị mục được chọn
        JLabel selectedLabel = new JLabel("Selected Item: ");
 
        // Thêm ActionListener để xử lý sự kiện khi mục được chọn
        comboBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Lấy mục được chọn từ JComboBox và hiển thị nó trong JLabel
                String selectedValue = (String) comboBox.getSelectedItem();
                selectedLabel.setText("Selected Item: " + selectedValue);
            }
        });
 
        // Thêm JComboBox và JLabel vào JFrame
        frame.add(comboBox);
        frame.add(selectedLabel);
 
        // Thiết lập bố trí sử dụng null layout
        frame.setLayout(null);
 
        // Đặt vị trí cho JComboBox và JLabel
        comboBox.setBounds(50, 50, 150, 30);
        selectedLabel.setBounds(50, 90, 200, 30);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}

Trong ví dụ trên:

  • Một mảng items chứa các mục sẽ được hiển thị trong JComboBox.
  • Một JComboBox được tạo từ mảng items.
  • Một JLabel được tạo để hiển thị mục được chọn.
  • Sự kiện ActionListener được thêm vào JComboBox để xử lý sự kiện khi mục được chọn.
  • JComboBox và JLabel được thêm vào JFrame.

Khi bạn chạy chương trình, bạn sẽ thấy một cửa sổ chứa một JComboBox và một nhãn. Bạn có thể chọn một mục từ danh sách thả xuống và mục đã chọn sẽ được hiển thị trong nhãn.

Kết quả sau khi chạy đoạn mã ví dụ về JComboBox.

9. Layout Manager – Trình quản lý bố cục

Trong Java Swing, có nhiều trình quản lý bố cục (Layout Manager) khác nhau để giúp tổ chức và kiểm soát việc sắp xếp các thành phần trong giao diện người dùng. Dưới đây là một số ví dụ về cách sử dụng các trình quản lý bố cục phổ biến: FlowLayout, BorderLayout, và GridLayout.

FlowLayout: FlowLayout sắp xếp các thành phần theo chiều ngang, mỗi thành phần được đặt liền kề thành một dòng.

Mã ví dụ về FlowLayout.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.swing.*;
import java.awt.*;
 
public class FlowLayoutExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("FlowLayout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Tạo các JButton
        JButton button1 = new JButton("Button 1");
        JButton button2 = new JButton("Button 2");
        JButton button3 = new JButton("Button 3");
 
        // Tạo JPanel sử dụng FlowLayout
        JPanel panel = new JPanel(new FlowLayout());
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
 
        // Thêm JPanel vào JFrame
        frame.add(panel);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}
Kết quả khi chạy đoạn mã ví dụ về FlowLayout.

BorderLayout: Chia thành phần thành năm vùng gồm North, South, East, West, và Center.

Mã ví dụ về BorderLayout.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import javax.swing.*;
import java.awt.*;
 
public class BorderLayoutExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("BorderLayout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Tạo các JButton
        JButton button1 = new JButton("North");
        JButton button2 = new JButton("South");
        JButton button3 = new JButton("East");
        JButton button4 = new JButton("West");
        JButton button5 = new JButton("Center");
 
        // Tạo JPanel sử dụng BorderLayout
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(button1, BorderLayout.NORTH);
        panel.add(button2, BorderLayout.SOUTH);
        panel.add(button3, BorderLayout.EAST);
        panel.add(button4, BorderLayout.WEST);
        panel.add(button5, BorderLayout.CENTER);
 
        // Thêm JPanel vào JFrame
        frame.add(panel);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}
Kết quả khi chạy đoạn mã ví dụ về BorderLayout.

GridLayout: Chia thành phần thành một lưới ô vuông với số hàng và số cột được xác định.

Mã ví dụ về GridLayout.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import javax.swing.*;
import java.awt.*;
 
public class GridLayoutExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("GridLayout Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
 
        // Tạo các JButton
        JButton button1 = new JButton("Button 1");
        JButton button2 = new JButton("Button 2");
        JButton button3 = new JButton("Button 3");
        JButton button4 = new JButton("Button 4");
 
        // Tạo JPanel sử dụng GridLayout
        JPanel panel = new JPanel(new GridLayout(2, 2));
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);
 
        // Thêm JPanel vào JFrame
        frame.add(panel);
 
        // Hiển thị JFrame
        frame.setVisible(true);
    }
}
Kết quả khi chạy đoạn mã ví dụ về GridLayout.

Các ví dụ trên giúp bạn hiểu cách sử dụng và thiết lập các trình quản lý bố cục khác nhau trong Java Swing để tổ chức và sắp xếp các thành phần trong giao diện người dùng.

Kết luận

Trong bài này, chúng ta đã cùng nhau khám phá về Java Swing, một bộ công cụ mạnh mẽ để phát triển giao diện người dùng (GUI) trong ngôn ngữ lập trình Java. Chúng ta đã tìm hiểu về cấu trúc phân cấp của các lớp trong Java Swing, một hệ thống linh hoạt và mở rộng để xây dựng ứng dụng đa nền tảng và thân thiện với người dùng.

Java Swing không chỉ đơn giản là một bộ công cụ, mà còn là một hệ sinh thái đa dạng của các thành phần và trình quản lý bố cục, giúp bạn tạo ra giao diện người dùng đẹp mắt và linh hoạt.

Hy vọng rằng thông qua bài viết này, bạn đã có cái nhìn tổng quan về Java Swing và có đủ kiến thức để bắt đầu xây dựng ứng dụng GUI trong ngôn ngữ lập trình Java. Đừng ngần ngại thực hành và khám phá thêm về sức mạnh của Java Swing trong phát triển ứng dụng.

Chúc các bạn thành công!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

zalo-icon
skypee-icon
phone-icon
Thông Báo

Nội dung hiển thị trong Modal của bạn