Câu trả lời:
AWT là giao diện Java với mã GUI hệ thống gốc có trong HĐH của bạn. Nó sẽ không hoạt động giống nhau trên mọi hệ thống, mặc dù nó cố gắng.
Swing là một GUI Java thuần túy ít nhiều. Nó sử dụng AWT để tạo cửa sổ hệ điều hành và sau đó vẽ hình ảnh của các nút, nhãn, văn bản, hộp kiểm, v.v. vào cửa sổ đó và phản hồi tất cả các lần nhấp chuột, các mục chính, v.v., tự quyết định việc cần làm thay vì để hệ điều hành xử lý nó. Do đó, Swing có thể di động 100% và giống nhau trên các nền tảng (mặc dù nó có thể nhìn được và có "giao diện có thể cắm được" có thể khiến nó trông giống hoặc ít hơn các cửa sổ và widget gốc trông như thế nào).
Đây là những cách tiếp cận rất khác nhau đối với các bộ công cụ GUI và có rất nhiều hậu quả. Một câu trả lời đầy đủ cho câu hỏi của bạn sẽ cố gắng khám phá tất cả những câu hỏi đó. :) Đây là một cặp vợ chồng:
AWT là một giao diện đa nền tảng, do đó, mặc dù nó sử dụng hệ điều hành GUI hoặc bộ công cụ GUI gốc cho chức năng của nó, nó không cung cấp quyền truy cập vào mọi thứ mà những bộ công cụ đó có thể làm. Các widget AWT nâng cao hoặc mới hơn có thể tồn tại trên một nền tảng có thể không được hỗ trợ trên nền tảng khác. Các tính năng của các widget không giống nhau trên mọi nền tảng có thể không được hỗ trợ hoặc tệ hơn là chúng có thể hoạt động khác nhau trên mỗi nền tảng. Mọi người thường đầu tư rất nhiều nỗ lực để khiến các ứng dụng AWT của họ hoạt động ổn định trên các nền tảng - ví dụ, họ có thể cố gắng thực hiện các cuộc gọi thành mã gốc từ Java.
Vì AWT sử dụng các widget GUI gốc, HĐH của bạn biết về chúng và xử lý đặt chúng trước mặt nhau, v.v., trong khi các widget Swing là các pixel vô nghĩa trong một cửa sổ theo quan điểm của HĐH. Swing tự xử lý bố trí và xếp chồng vật dụng của bạn. Trộn AWT và Swing rất không được hỗ trợ và có thể dẫn đến kết quả lố bịch, chẳng hạn như các nút gốc che khuất mọi thứ khác trong hộp thoại mà chúng cư trú vì mọi thứ khác được tạo bằng Swing.
Vì Swing cố gắng làm mọi thứ có thể trong Java ngoài các thói quen đồ họa rất thô được cung cấp bởi cửa sổ GUI gốc, nên nó được sử dụng để chịu một hình phạt hiệu năng khá cao so với AWT. Điều này làm cho Swing không may bị chậm để bắt kịp. Tuy nhiên, điều này đã bị thu hẹp đáng kể trong vài năm qua do các JVM được tối ưu hóa hơn, máy móc nhanh hơn và (tôi đoán) tối ưu hóa các phần bên trong Swing. Ngày nay, một ứng dụng Swing có thể chạy đủ nhanh để có thể sử dụng được hoặc thậm chí là nhanh, và gần như không thể phân biệt được với một ứng dụng sử dụng các widget gốc. Một số người sẽ nói rằng phải mất quá nhiều thời gian để đi đến điểm này, nhưng hầu hết sẽ nói rằng nó rất xứng đáng.
Cuối cùng, bạn cũng có thể muốn kiểm tra SWT (bộ công cụ GUI được sử dụng cho Eclipse và một giải pháp thay thế cho cả AWT và Swing), phần nào trở lại ý tưởng AWT về việc truy cập các Widget gốc thông qua Java.
Sự khác biệt cơ bản mà mọi người đã đề cập là một trọng lượng nặng và khác là trọng lượng nhẹ . Để tôi giải thích, về cơ bản, thuật ngữ nặng có nghĩa là gì khi bạn sử dụng các thành phần awt, mã gốc được sử dụng để lấy thành phần khung nhìn được tạo bởi Hệ điều hành , đó là lý do tại sao giao diện của nó thay đổi từ HĐH sang HĐH. Trong trường hợp như trong các thành phần swing, trách nhiệm của JVM là tạo ra khung nhìn cho các thành phần. Một tuyên bố khác mà tôi thấy là swing là dựa trên MVC và awt thì không.
Xoay so với AWT . Về cơ bản AWT xuất hiện đầu tiên và là một tập hợp các thành phần UI hạng nặng (có nghĩa là chúng là các hàm bao cho các đối tượng hệ điều hành) trong khi Swing được xây dựng trên đỉnh AWT với một bộ các thành phần nhẹ phong phú hơn.
Bất kỳ công việc UI Java nghiêm túc nào cũng được thực hiện trong Swing not AWT, chủ yếu được sử dụng cho các applet.
Cho đến khi AWT có thể hữu ích hơn so với Swing -
Một số hậu quả do sự khác biệt này giữa AWT và Swing.
AWT là một lớp mã mỏng trên hệ điều hành, trong khi Swing lớn hơn nhiều. Swing cũng có chức năng phong phú hơn rất nhiều. Khi sử dụng AWT, bạn phải tự thực hiện rất nhiều thứ, trong khi Swing được tích hợp sẵn. Đối với công việc chuyên sâu về GUI, AWT cảm thấy rất nguyên thủy khi làm việc so với Swing. Vì Swing thực hiện chính chức năng GUI thay vì dựa vào HĐH máy chủ, nên nó có thể cung cấp một môi trường phong phú hơn trên tất cả các nền tảng mà Java chạy. AWT bị hạn chế hơn trong việc cung cấp cùng chức năng trên tất cả các nền tảng vì không phải tất cả các nền tảng đều thực hiện các điều khiển giống nhau theo cùng một cách.
Các thành phần xoay được gọi là "nhẹ" vì chúng không yêu cầu đối tượng HĐH gốc thực hiện chức năng của chúng. JDialog
và JFrame
là nặng, bởi vì họ có một đồng đẳng. Vì vậy, các thành phần như JButton
,
JTextArea
v.v., rất nhẹ vì chúng không có hệ điều hành ngang hàng.
Một ngang hàng là một tiện ích được cung cấp bởi hệ điều hành, chẳng hạn như một đối tượng nút hoặc một đối tượng lĩnh vực nhập cảnh.
Lung lay:
AWT:
AWT 1. AWT chiếm nhiều không gian bộ nhớ hơn 2. AWT là nền tảng phụ thuộc 3. AWT yêu cầu gói javax.awt
xích đu 1. Xích chiếm ít không gian bộ nhớ 2. Thành phần swing là nền tảng độc lập 3. Swing yêu cầu gói javax.swing