Java Swing: Tổng Quan, So Sánh Với AWT và Ví Dụ Thực Tế

Java Swing là một phần quan trọng của Java Foundation Classes (JFC), được sử dụng rộng rãi để phát triển các ứng dụng giao diện người dùng (GUI) trên nền tảng Java. Được xây dựng dựa trên API AWT (Abstract Windowing Toolkit), Swing nổi bật với khả năng cung cấp các thành phần giao diện độc lập nền tảng và nhẹ hơn, giúp tạo ra các ứng dụng desktop mạnh mẽ và linh hoạt. Gói javax.swing cung cấp một loạt các lớp như JButton, JTextField, JTextArea, JRadioButton, JCheckbox, JMenu, JColorChooser, và nhiều thành phần khác, cho phép lập trình viên xây dựng giao diện người dùng phức tạp và tùy biến cao.

So Sánh Chi Tiết AWT và Swing

AWT (Abstract Windowing Toolkit) và Swing đều là các toolkit dùng để xây dựng giao diện người dùng trong Java, nhưng giữa chúng có những khác biệt cơ bản:

Đặc điểm AWT Swing
Nền tảng Phụ thuộc nền tảng Độc lập nền tảng
Tính chất Nặng Nhẹ
Plugin Không hỗ trợ plugin Hỗ trợ plugin
Thành phần Ít thành phần hơn Nhiều thành phần mạnh mẽ hơn (ví dụ: tables, lists, scrollpanes, colorchooser, tabbedpane)
Kiến trúc Không tuân theo MVC (Model-View-Controller) Tuân theo mô hình MVC

Sự khác biệt lớn nhất giữa AWT và Swing là AWT sử dụng các thành phần giao diện người dùng gốc của hệ điều hành, điều này có nghĩa là giao diện của ứng dụng AWT sẽ khác nhau trên mỗi hệ điều hành. Ngược lại, Swing vẽ các thành phần của riêng mình, do đó giao diện của ứng dụng Swing sẽ giống nhau trên mọi hệ điều hành. Điều này làm cho Swing trở thành một lựa chọn tốt hơn cho việc phát triển các ứng dụng đa nền tảng.

JFC (Java Foundation Classes) là gì?

Java Foundation Classes (JFC) là một tập hợp các API Java được thiết kế để đơn giản hóa việc phát triển các ứng dụng desktop với giao diện người dùng đồ họa (GUI). JFC bao gồm Swing, Java 2D, Accessibility API, và các thành phần khác. Mục tiêu của JFC là cung cấp một nền tảng thống nhất và mạnh mẽ cho việc xây dựng các ứng dụng desktop trên Java.

Phân Cấp Lớp Java Swing

Hệ thống phân cấp của API Java Swing cho thấy cách các lớp và giao diện được tổ chức và kế thừa lẫn nhau. Điều này giúp các nhà phát triển hiểu rõ hơn về cấu trúc của Swing và cách sử dụng các thành phần khác nhau.

Phân cấp các lớp Java SwingPhân cấp các lớp Java Swing

Các Phương Thức Thường Dùng của Lớp Component

Lớp Component là lớp cha của hầu hết các thành phần giao diện người dùng trong Swing. Dưới đây là một số phương thức phổ biến của lớp Component:

Phương thức Mô tả
public void add(Component c) Thêm một thành phần vào thành phần khác.
public void setSize(int width, int height) Thiết lập kích thước của thành phần.
public void setLayout(LayoutManager m) Thiết lập trình quản lý bố cục (layout manager) cho thành phần.
public void setVisible(boolean b) Thiết lập khả năng hiển thị của thành phần. Mặc định là false (ẩn).

Ví Dụ Về Java Swing

Có hai cách chính để tạo một khung (Frame) trong Java Swing:

  1. Tạo đối tượng của lớp JFrame.
  2. Kế thừa lớp JFrame.

Code Swing có thể được viết bên trong hàm main(), constructor, hoặc bất kỳ phương thức nào khác.

Ví Dụ Swing Java Đơn Giản

Ví dụ dưới đây minh họa cách tạo một button và thêm nó vào một đối tượng JFrame bên trong phương thức main():

import javax.swing.JButton;
import javax.swing.JFrame;

public class SimpleSwingExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Ví dụ Swing đơn giản");
        JButton button = new JButton("Nhấn vào đây");
        frame.add(button);
        frame.setSize(300, 200);
        frame.setLayout(null);
        frame.setVisible(true);
    }
}

Kết quả:

Ví dụ Java SwingVí dụ Java Swingalt="Giao diện chương trình Java Swing với một nút nhấn"

Ví Dụ Java Swing – Tạo Đối Tượng của Lớp JFrame

Chúng ta cũng có thể viết toàn bộ mã tạo JFrameJButton bên trong constructor:

import javax.swing.*;
import java.awt.*;

public class JFrameExample {

    JFrame frame;

    JFrameExample(){
        frame=new JFrame("JFrame Example");
        JButton button=new JButton("Click Here");
        button.setBounds(50,100,90,30);

        frame.add(button);
        frame.setSize(400,400);
        frame.setLayout(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new JFrameExample();
    }

}

Ví Dụ Java Swing – Kế Thừa Lớp JFrame

Một cách khác là kế thừa lớp JFrame, giúp tránh việc tạo một thể hiện của lớp JFrame:

import javax.swing.*;
import java.awt.*;
public class FrameExample extends JFrame {
    JFrame frame;
    FrameExample(){
        JButton button=new JButton("Click Here");
        button.setBounds(50,100,90,30);
        add(button);
        setSize(400,400);
        setLayout(null);
        setVisible(true);
    }
    public static void main(String[] args) {
        new FrameExample();
    }
}

Java Swing cung cấp một nền tảng mạnh mẽ và linh hoạt để xây dựng các ứng dụng desktop với giao diện người dùng đồ họa. Bằng cách hiểu rõ các thành phần cơ bản và cách chúng hoạt động, các nhà phát triển có thể tạo ra các ứng dụng Java chuyên nghiệp và hiệu quả.