Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Kiến trúc Java Swing trong Java

Java Swing là tập hợp các API cung cấp giao diện người dùng đồ họa (GUI) cho các chương trình Java. Swing được phát triển dựa trên API trước đó là Abstract Window Toolkit (AWT). Swing cung cấp các thành phần GUI phong phú và tinh vi hơn AWT, từ các thành phần đơn giản đến cây (tree) và bảng (table) phức tạp. Swing cung cấp pluggable look and feel (giao diện có thể thay thế) cho phép giao diện chương trình Java độc lập với nền tảng hệ điều hành.

Đặc điểm chính của Java Swing

Java Swing độc lập nền tảng và tuân theo khuôn khổ MVC (Model View Controller).

  • Pluggable look and feel – Swing hỗ trợ nhiều giao diện: Windows, UNIX, Motif, và giao diện Metal gốc của Java. Người dùng có thể chuyển đổi giao diện tại runtime mà không cần khởi động lại ứng dụng.
  • Lightweight components – Tất cả thành phần Swing đều là lightweight (nhẹ) trừ một số top-level containers. "Lightweight" nghĩa là thành phần tự vẽ mình bằng các phương thức vẽ của đối tượng Graphics thay vì تعتمد vào hệ điều hành. Do đó, ứng dụng hiển thị nhanh hơn và tiêu thụ ít bộ nhớ hơn so với AWT.
  • Simplified MVC – Swing sử dụng kiến trúc Model-View-Controller đơn giản hóa (gọi là model-delegate). Mỗi thành phần chứa một model và một UI delegate, gom view và controller của MVC. UI delegate chịu trách nhiệm vẽ màn hình và xử lý sự kiện GUI. Model quản lý thông tin/trạng thái của thành phần.

Ví dụ minh họa MVC

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

// Model part
class Model { 
    private int x; 
    public Model() { x = 0; } 
    public Model(int x) { this.x = x; } 
    public void setX(){ x++; } 
    public int getX() { return x; } 
} 

// View part 
class View { 
    private JFrame frame; 
    private JLabel label; 
    private JButton button; 
    public View(String text) { 
        frame = new JFrame("View"); 
        frame.getContentPane().setLayout(new BorderLayout()); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setSize(200,200); 
        frame.setVisible(true); 
        label = new JLabel(text); 
        frame.getContentPane().add(label, BorderLayout.CENTER); 
        button = new JButton("Button"); 
        frame.getContentPane().add(button, BorderLayout.SOUTH); 
    } 
    public JButton getButton() { return button; } 
    public void setText(String text) { label.setText(text); } 
} 

// Controller part
class Controller { 
    private Model model; 
    private View view; 
    private ActionListener actionListener; 
    public Controller(Model model, View view) { 
        this.model = model; 
        this.view = view; 
    } 
    public void contol() { 
        actionListener = new ActionListener() { 
            public void actionPerformed(ActionEvent actionEvent) { 
                linkBtnAndLabel(); 
            } 
        }; 
        view.getButton().addActionListener(actionListener); 
    } 
    private void linkBtnAndLabel() { 
        model.setX(); 
        view.setText(Integer.toString(model.getX())); 
    } 
} 

// Main class 
public class Main { 
    public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable() { 
            @Override 
            public void run() { 
                try { // Look and Feel, Java Look and Feel 
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
                } catch (Exception ex) { } 
                Model model = new Model(0); 
                View view = new View("-"); 
                Controller controller = new Controller(model,view); 
                controller.contol(); 
            } 
        }); 
    } 
}

Kết quả đầu ra

Một cửa sổ hiển thị nhãn "-" và nút "Button". Mỗi lần nhấn nút, số trên nhãn tăng lên 1, minh họa luồng dữ liệu Model → Controller → View.