Abstrakcyjny zestaw narzędzi do okien

Formularz Windows z kilkoma przykładami AWT

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 :

AWT udostępnia również aplikacjom niektóre funkcje wyższego poziomu, takie jak:

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