Abstrakcyjny zestaw narzędzi do okien
Zestaw narzędzi Abstract Window Toolkit ( AWT ) to oryginalny, zależny od platformy zestaw narzędzi Javy do obsługi okien , grafiki i widżetów interfejsu użytkownika , poprzedzający Swing . AWT jest częścią Java Foundation Classes (JFC) — standardowego interfejsu API zapewniającego graficzny interfejs użytkownika (GUI) dla programu Java. AWT to także zestaw narzędzi GUI dla wielu Java ME . Na przykład Connected Device Configuration wymagają środowisk wykonawczych Java na telefonach komórkowych do obsługi pakietu Abstract Window Toolkit.
Historia
Kiedy firma Sun Microsystems po raz pierwszy wypuściła Javę w 1995 roku, widżety AWT zapewniały niski poziom abstrakcji w stosunku do bazowego natywnego interfejsu użytkownika. Na przykład utworzenie pola wyboru AWT spowodowałoby, że AWT bezpośrednio wywołałoby podstawową natywną procedurę, która utworzyła pole wyboru. Jednak pole wyboru w systemie Microsoft Windows nie jest dokładnie takie samo, jak pole wyboru w systemie Mac OS lub w różnych typach systemu Unix . Niektórzy programiści aplikacji preferują ten model, ponieważ zapewnia on wysoki stopień wierności bazowemu natywnemu zestawowi narzędzi okienkowych i bezproblemową integrację z aplikacjami natywnymi. Innymi słowy, program GUI napisany przy użyciu AWT wygląda jak natywna aplikacja Microsoft Windows, gdy jest uruchamiany w systemie Windows, ale ten sam program wygląda jak natywna aplikacja Apple Macintosh, gdy jest uruchamiany na komputerze Mac itp. Jednak niektórzy twórcy aplikacji nie lubią tego modelu, ponieważ wolą, aby ich aplikacje wyglądały dokładnie tak samo na każdej platformie.
W J2SE 1.2 zestaw narzędzi Swing w dużej mierze zastąpił widżety AWT. Oprócz udostępniania bogatszego zestawu widżetów interfejsu użytkownika, Swing rysuje własne widżety (używając języka Java 2D do wywoływania podprogramów niskiego poziomu w lokalnym podsystemie graficznym) zamiast polegać na module interfejsu użytkownika wysokiego poziomu systemu operacyjnego. Swing zapewnia opcję korzystania z „wyglądu i stylu” natywnej platformy lub wyglądu i stylu międzyplatformowego („Wygląd i styl Java”), który wygląda tak samo we wszystkich systemach okienkowych.
Architektura
AWT zapewnia dwa poziomy API :
- Ogólny interfejs między Javą a systemem natywnym, używany do obsługi okien , zdarzeń i menedżerów układu . Ten interfejs API jest podstawą programowania Java GUI i jest również używany przez Swing i Java 2D . Zawiera:
- Interfejs między natywnym systemem okienkowym a aplikacją Java;
- Rdzeń podsystemu zdarzeń GUI ;
- Kilku menedżerów układu ;
- Interfejs do urządzeń wejściowych, takich jak mysz i klawiatura ; I
- Pakiet
java.awt.datatransfer
do użytku ze schowkiem i przeciąganiem i upuszczaniem .
- Podstawowy zestaw widżetów GUI, takich jak przyciski, pola tekstowe i menu. Zapewnia również natywny interfejs AWT , który umożliwia renderowanie bibliotek skompilowanych do kodu natywnego w celu rysowania bezpośrednio na powierzchni rysunkowej obiektu AWT
Canvas
.
AWT udostępnia również aplikacjom niektóre funkcje wyższego poziomu, takie jak:
- Dostęp do zasobnika systemowego w systemach wspierających; I
- Możliwość uruchamiania niektórych aplikacji komputerowych, takich jak przeglądarki internetowe i klienci poczty e-mail z aplikacji Java.
Ani AWT, ani Swing nie są z natury bezpieczne dla wątków . Dlatego kod, który aktualizuje GUI lub przetwarza zdarzenia, powinien być wykonywany w wątku wysyłania zdarzeń . Niezastosowanie się do tego zalecenia może spowodować zakleszczenie lub sytuację wyścigu. Aby rozwiązać ten problem, klasa narzędzi o nazwie SwingWorker umożliwia aplikacjom wykonywanie czasochłonnych zadań po zdarzeniach interakcji użytkownika w wątku wysyłania zdarzeń.
Mieszanie komponentów AWT i Swing
Tam, gdzie istnieje wersja Swing komponentu AWT, zaczyna się ona od J- i powinna być używana wyłącznie, zastępując wersję AWT. Na przykład w Swing używaj tylko klasy JButton, nigdy Button. Jak wspomniano powyżej, podstawowe klasy AWT, takie jak Color i Font, są nadal używane w Swing.
Podczas rysowania w Swingu użyj JPanel i zastąp paintComponent(Graphics g) zamiast używać metod paint() AWT.
Przed aktualizacją Java 6 Update 12 mieszanie komponentów Swing i podstawowych widżetów AWT często powodowało niepożądane efekty uboczne, a widżety AWT pojawiały się na wierzchu widżetów Swing niezależnie od ich zdefiniowanej kolejności z . Ten problem wynikał z tego, że architektura renderowania dwóch zestawów narzędzi widżetów była bardzo różna, mimo że Swing pożyczył ciężkie kontenery od AWT.
Począwszy od wersji Java 6 Update 12 możliwe jest łączenie widżetów Swing i AWT bez problemów z kolejnością osi.
Przykład
import java.awt.* ; import java.awt.event.WindowAdapter ; importuj java.awt.event.WindowEvent ; public class MojaAplikacja { public static void main ( String [] args ) { Frame frame = new Frame ( "Application" ); rama . dodaj ( nowa etykieta ( "Cześć!" )); rama . setRozmiar ( 500 , 500 ); rama . setLocationRelativeTo ( null ); // Wyśrodkowuje ramę okna . addWindowListener ( new WindowAdapter () { @Override public void windowClosing ( WindowEvent e ) { frame .dispose (); // Zwalnia natywne zasoby ekranu } } ); rama . setVisible ( prawda ); } }
Realizacja
Ponieważ AWT jest pomostem do podstawowego natywnego interfejsu użytkownika, jego implementacja w nowym systemie operacyjnym może wymagać dużo pracy, zwłaszcza jeśli obejmuje którykolwiek z widżetów GUI AWT, ponieważ każdy z nich wymaga, aby jego natywne odpowiedniki zostały opracowane od zera.
Utworzono nowy projekt, Caciocavallo , który udostępnia API języka Java oparte na OpenJDK w celu ułatwienia implementacji AWT w nowych systemach. W ramach projektu pomyślnie zaimplementowano widżety AWT przy użyciu języka Java2D . Wszystkie niezbędne modyfikacje rdzenia JDK zostały od tego czasu wypchnięte do OpenJDK 7 , co oznacza, że Java może być teraz używana na stosie graficznym innym niż jeden z tych dostarczonych przez oficjalny JDK ( X Window System , OpenGL lub DirectX ), poprzez włączenie bibliotekę zewnętrzną i ustawienie niektórych właściwości systemowych. Backend DirectFB dla Caciocavallo jest w fazie rozwoju, podobnie jak backend HTML5 ; celem jest wdrożenie istniejących aplikacji Swing — bez obsługi języka Java — jako zwykłych aplikacji internetowych działających na serwerze sieciowym.
Zobacz też
Linki zewnętrzne
-
java.awt
( dokumentacja API Javadoc AWT ) - Dokumentacja AWT
- AWT/Swing
- java.awt