Odpowiedzi:
AWT to interfejs Java do natywnego kodu GUI systemu obecnego w systemie operacyjnym. Nie będzie działać tak samo na każdym systemie, chociaż próbuje.
Swing to mniej lub bardziej czysty interfejs GUI. Korzysta z AWT, aby utworzyć okno systemu operacyjnego, a następnie maluje obrazy przycisków, etykiet, tekstu, pól wyboru itp. W tym oknie i reaguje na wszystkie kliknięcia myszą, wpisy kluczy itp., Sam decydując, co zrobić zamiast pozwolić systemowi operacyjnemu sobie z tym poradzić. W ten sposób Swing jest w 100% przenośny i taki sam na różnych platformach (chociaż jest łatwy do skinowania i ma „wygląd i wtyczkę”, dzięki czemu może wyglądać mniej więcej tak, jak wyglądałyby natywne okna i widżety).
Są to bardzo różne podejścia do zestawów narzędzi GUI i mają wiele konsekwencji. Pełna odpowiedź na Twoje pytanie będzie próbowała odkryć wszystkie te pytania. :) Oto kilka:
AWT jest interfejsem wieloplatformowym, więc nawet jeśli używa swojej podstawowej wersji systemu operacyjnego lub natywnego zestawu narzędzi GUI, nie zapewnia dostępu do wszystkiego, co mogą zrobić te zestawy narzędzi. Zaawansowane lub nowsze widżety AWT, które mogą istnieć na jednej platformie, mogą nie być obsługiwane na innej. Funkcje widżetów, które nie są takie same na każdej platformie, mogą nie być obsługiwane lub, co gorsza, mogą działać inaczej na każdej platformie. Ludzie wkładali wiele wysiłku, aby aplikacje AWT działały konsekwentnie na różnych platformach - na przykład mogą próbować wywoływać kod natywny z języka Java.
Ponieważ AWT używa natywnych widżetów GUI, Twój system operacyjny wie o nich i obsługuje umieszczanie ich przed sobą itp., Podczas gdy widżety Swing są pozbawionymi znaczenia pikselami w oknie z punktu widzenia twojego systemu operacyjnego. Sam Swing obsługuje układ i układanie widżetów. Mieszanie AWT i Swing jest wysoce nieobsługiwane i może prowadzić do absurdalnych rezultatów, takich jak natywne przyciski, które zasłaniają wszystko inne w oknie dialogowym, w którym się znajdują, ponieważ wszystko inne zostało utworzone za pomocą Swing.
Ponieważ Swing próbuje robić wszystko, co możliwe w Javie, z wyjątkiem bardzo surowych procedur graficznych udostępnianych przez rodzime okno GUI, poniosło to znaczną obniżkę wydajności w porównaniu z AWT. To spowodowało, że Swing niestety powoli zaczął łapać. Jednak w ciągu ostatnich kilku lat znacznie się to zmniejszyło z powodu bardziej zoptymalizowanych maszyn JVM, szybszych maszyn i (jak sądzę) optymalizacji wewnętrznych elementów Swing. Dzisiaj aplikacja Swing może działać wystarczająco szybko, aby była sprawna lub nawet spakowana, i prawie nie do odróżnienia od aplikacji używającej natywnych widżetów. Niektórzy powiedzą, że zajęło to zbyt długo, ale większość powie, że warto.
Na koniec możesz także wypróbować SWT (zestaw narzędzi GUI używany dla Eclipse oraz alternatywa zarówno dla AWT, jak i Swing), co jest poniekąd powrotem do pomysłu AWT na dostęp do natywnych widżetów przez Javę.
Podstawową różnicą, o której już wszyscy wspominali, jest to, że jedna jest ciężka, a druga lekka . Pozwól mi wyjaśnić, w zasadzie to, co oznacza pojęcie „ciężar”, oznacza, że kiedy używasz komponentów awt, natywny kod używany do uzyskania komponentu widoku jest generowany przez system operacyjny , dlatego wygląd i działanie zmienia się z systemu operacyjnego na system operacyjny. W przypadku gdy, podobnie jak w komponentach wahadłowych, JVM odpowiada za generowanie widoku komponentów. Innym stwierdzeniem, które widziałem jest to, że swing jest oparty na MVC, a awt nie.
Huśtawka vs AWT . Zasadniczo AWT był pierwszy i jest zestawem ciężkich elementów interfejsu użytkownika (co oznacza, że są one opakowaniami dla obiektów systemu operacyjnego), podczas gdy Swing jest zbudowany na AWT z bogatszym zestawem lekkich komponentów.
Wszelkie poważne prace nad interfejsem Java są wykonywane w Swing, a nie AWT, który był używany głównie w apletach.
O ile AWT może być bardziej przydatne niż Swing -
Różnice między AWT i Swing wynikają z kilku konsekwencji.
AWT to cienka warstwa kodu na systemie operacyjnym, podczas gdy Swing jest znacznie większy. Swing ma również znacznie bogatszą funkcjonalność. Korzystając z AWT, musisz sam wdrożyć wiele rzeczy, podczas gdy Swing ma je wbudowane. W przypadku pracy wymagającej dużego GUI, AWT jest bardzo prymitywna w porównaniu do Swinga. Ponieważ Swing sam implementuje funkcjonalność GUI zamiast polegać na systemie operacyjnym hosta, może zaoferować bogatsze środowisko na wszystkich platformach, na których działa Java. AWT jest bardziej ograniczony w dostarczaniu tej samej funkcjonalności na wszystkich platformach, ponieważ nie wszystkie platformy implementują takie same kontrolki w ten sam sposób.
Komponenty Swing są nazywane „lekkimi”, ponieważ nie wymagają natywnego obiektu systemu operacyjnego do wdrożenia ich funkcji. JDialog
i JFrame
są ciężkie, ponieważ mają rówieśników. Tak jak komponenty JButton
,
JTextArea
itp, są lekkie, ponieważ nie mają sobie równych OS.
Element równorzędny to widget dostarczany przez system operacyjny, taki jak obiekt przycisku lub obiekt pola wejściowego.
Huśtawka:
AWT:
AWT 1. AWT zajmuje więcej miejsca w pamięci 2. AWT zależy od platformy 3. AWT wymaga pakietu javax.awt
huśtawki 1. Huśtawka zajmuje mniej miejsca w pamięci 2. Komponent Swing jest niezależny od platformy 3. Swing wymaga pakietu javax.swing