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

Tại sao AWT components là heavy-weight trong khi Swing components là light-weight trong Java?


  • AWT là viết tắt của Abstract Window ToolKit và nó hỗ trợ Java GUI programming. Nó là portable GUI library cho Stand-alone Java applications/applets. AWT cung cấp kết nối giữa ứng dụng của chúng ta và native GUI trong khi Java Swing triển khai một tập hợp GUI components xây dựng trên AWT technology và nó cung cấp pluggable look and feel. Java Swing được implement hoàn toàn bằng ngôn ngữ lập trình Java.
  • Trước hết, heavy-weight nghĩa là code sẽ mất thời gian load nhiều hơn và tiêu thụ nhiều System resources hơn. AWT được coi là heavy-weight vì components của nó phụ thuộc vào underlying Operating System. Ví dụ, khi tạo object của class java.awt.Checkbox, underlying Operating System sẽ sinh checkbox cho chúng ta. Đây cũng là lý do AWT components là platform dependent.
  • Mặt khác, hầu hết Java Swing components được implement trong chính Java. Một số top-level components như windows phụ thuộc vào Operating System. Nhưng tổng thể chương trình vẫn light-weight hơn AWT.
  • Java Swing là phiên bản advanced và optimized của AWT và được xây dựng trên AWT. Vẫn nhiều AWT classes được dùng trong Swing trực tiếp hoặc gián tiếp. Quan trọng là làm basics của AWT trước khi chuyển sang Java Swing. Nếu không, chúng ta không thể hiểu các sự thật cơ bản về control delegations trong GUI Java.

Ví dụ

import javax.swing.SwingUtilities; 
import java.awt.Button; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
public class Test { 
    public static void main(String[] args) { 
        ApplicationWindow window = new ApplicationWindow(); 
        window.setVisible(true); 
    } 
} 
class ApplicationWindow extends JFrame { 
    public ApplicationWindow() { 
        this.setSize(200, 100); 
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        this.setLayout(new FlowLayout()); 
        Button exitButton = new Button("Exit"); 
        exitButton.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent event) { 
                System.exit(0); 
            } 
        }); 
        this.add(exitButton); 
        JMenuBar menuBar = new JMenuBar(); 
        JMenu menu = new JMenu("Overlapping Menu"); 
        JMenuItem menuItem = new JMenuItem("Overlapping Item"); 
        menu.add(menuItem); 
        menuBar.add(menu); 
        this.setJMenuBar(menuBar); 
        this.validate(); 
    } 
}

Kết quả

Tại sao AWT components là heavy-weight trong khi Swing components là light-weight trong Java?