Abstract Window 툴킷

Abstract Window Toolkit
일부 AWT 예제를 포함한 Windows 폼

AWT(Abstract Window Toolkit)는 Java의 플랫폼 의존형 윈도우잉, 그래픽스 및 사용자 인터페이스 위젯 툴킷으로 Swing 이전 버전입니다.AWT는 Java 프로그램에 그래픽 사용자 인터페이스(GUI)를 제공하기 위한 표준 API인 Java Foundation Class(JFC)의 일부입니다.AWT는 다수의 Java ME 프로파일의 GUI 툴킷이기도 합니다.예를 들어 Connected Device Configuration 프로파일에서는 Abstract Window Toolkit을 지원하려면 휴대 전화의 Java 런타임이 필요합니다.

역사

Sun Microsystems가 1995년에 Java를 처음 출시했을 때 AWT 위젯은 기본 사용자 인터페이스에 대해 얇은 수준의 추상화를 제공했습니다.예를 들어 AWT 체크박스를 작성하면 AWT는 체크박스를 작성한 기본 네이티브서브루틴을 직접 호출합니다.다만, Microsoft Windows체크 박스는, Mac OS 또는 다양한 타입의 Unix 의 체크 박스와는 다릅니다.일부 애플리케이션 개발자는 기본 윈도우 툴킷에 대한 높은 충실도와 네이티브 애플리케이션과의 원활한 통합을 제공하기 때문에 이 모델을 선호합니다.즉, AWT를 사용하여 작성된 GUI 프로그램은 Windows에서 실행할 때는 Microsoft Windows 네이티브 애플리케이션처럼 보이지만 Mac에서 실행할 때는 Apple Macintosh 네이티브 애플리케이션처럼 보입니다.그러나 일부 응용 프로그램 개발자는 모든 플랫폼에서 응용 프로그램이 완전히 동일하게 보이기를 선호하기 때문에 이 모델을 좋아하지 않습니다.

J2SE 1.2에서는 Swing 툴킷이 AWT의 위젯을 대체했습니다.Swing은 보다 풍부한 UI 위젯 세트를 제공할 뿐만 아니라 운영 체제의 고급 사용자 인터페이스 모듈에 의존하는 대신 Java 2D를 사용하여 로컬 그래픽 서브시스템의 하위 서브루틴을 호출함으로써 자체 위젯을 그립니다.Swing은 네이티브 플랫폼의 "Look and Feel" 또는 모든 윈도우 시스템에서 동일하게 보이는 크로스 플랫폼 룩앤필(Java Look and Feel)" 중 하나를 사용할 수 있는 옵션을 제공합니다.

아키텍처

AWT는 다음 두 가지 수준의 API를 제공합니다.

또, AWT는, 다음과 같은 고도의 기능을 애플리케이션에 제공합니다.

  • 지원 시스템의 시스템 트레이에 대한 접근
  • Java 응용 프로그램에서 웹 브라우저이메일 클라이언트 등의 일부 데스크톱 응용 프로그램을 실행할 수 있습니다.

AWT와 Swing은 본질적으로 스레드 세이프가 아닙니다.따라서 GUI를 갱신하거나 이벤트를 처리하는 코드는 이벤트디스패치 스레드에서 실행해야 합니다.그렇지 않으면 교착 상태 또는 레이스 상태가 발생할 수 있습니다.이 문제를 해결하기 위해 SwingWorker라는 유틸리티 클래스를 사용하면 이벤트 디스패치스레드에서 사용자 인터랙션이벤트에 이어 응용 프로그램이 시간이 많이 걸리는 작업을 수행할 수 있습니다.

AWT와 Swing 컴포넌트 혼재

AWT 컴포넌트의 Swing 버전이 있는 경우 J-로 시작하고 AWT 버전을 대체하여 단독으로 사용해야 합니다.예를 들어 Swing에서는 버튼 클래스는 사용하지 않고 JButton만 사용합니다.위에서 설명한 바와 같이 Swing에서는 Color나 Font 등의 AWT 코어 클래스가 그대로 사용되고 있습니다.

Swing으로 그릴 때는 AWT paint() 메서드를 사용하는 대신 JPanel을 사용하여 paint Component(Graphics g)를 덮어씁니다.

Java 6 Update 12 이전 버전에서는 Swing 구성 요소와 기본 AWT 위젯을 혼합하면 정의된 z 순서에 관계없이 Swing 위젯 위에 AWT 위젯이 나타나는 원치 않는 부작용이 종종 발생했습니다.이 문제는 Swing이 AWT에서 [1]헤비웨이트 탑 컨테이너를 빌렸음에도 불구하고 두 위젯 툴킷의 렌더링 아키텍처가 매우 달랐기 때문입니다.

Java 6 Update 12부터는 Z 오더 [2]문제 없이 Swing과 AWT 위젯을 혼합할 수 있습니다.

수입품 java.awt.*; 수입품 java.awt.이벤트윈도 어댑터; 수입품 java.awt.이벤트윈도 이벤트;  일반의 학급 마이앱 {      일반의 정적인 무효 주된(스트링[] args) {           = 신규 ("응용 프로그램");                  .더하다(신규 라벨.("안녕하세요!"));         .set 사이즈(500, 500);         .set Location Relative To(무효); // 창을 가운데에 맞춥니다.                  .add Window Listener(신규 윈도 어댑터() {             @오버라이드             일반의 무효 창 닫기(윈도 이벤트 e) {                 .처분하다(); // 기본 화면 리소스를 해제합니다.             }         });                  .set Visible(진실의);     } } 

실행

AWT는 기본 네이티브 사용자 인터페이스에 대한 브리지이기 때문에 특히 AWT GUI 위젯 중 하나를 사용하는 경우에는 네이티브피어를 처음부터 개발할 필요가 있기 때문에 새로운 운영체제에서의 실장에는 많은 작업이 필요할 수 있습니다.

새로운 프로젝트인 Caciocavallo가 생성되었습니다.이 프로젝트는 OpenJDK 기반의 Java API를 제공하여 새로운 [3][4]시스템에서 AWT 구현을 용이하게 합니다.프로젝트는 Java2D[5]사용하여 AWT 위젯을 성공적으로 구현했습니다.그 후 필요한 모든 코어 JDK 수정이 OpenJDK [6]7로 푸시되었습니다.즉, Java는 외부 라이브러리를 포함하여 공식 JDK(X Window System, OpenGL 또는 DirectX)가 제공하는 그래픽스 스택 이외의 그래픽스 스택에서 사용할 수 있게 되었습니다.Caciocavallo용[7] DirectFB 백엔드는 HTML5 백엔드와 마찬가지로 개발 중입니다. 목표는 Java 지원 없이 웹 [7][8]서버에서 실행되는 일반 웹 애플리케이션으로 기존 Swing 애플리케이션을 배치하는 것입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Fowler, Amy (1994). "Mixing heavy and light components". Sun Microsystems. Archived from the original on 23 December 2011. Retrieved 17 December 2008.
  2. ^ "Bug/RFE fixed in current JDK 6u12 build". Sun Microsystems. 12 December 2008. Archived from the original on 17 December 2008. Retrieved 17 December 2008.
  3. ^ Torre, Mario (2 March 2008). "FINAL PROPOSAL: Portable GUI backends". Archived from the original on 19 March 2012. Retrieved 7 September 2008.
  4. ^ Kennke, Roman (18 December 2008). "Caciocavallo Architecture Overview". Retrieved 7 September 2008.
  5. ^ Kennke, Roman (3 September 2008). "Cacio Swing AWT peers". Archived from the original on 13 March 2012. Retrieved 7 September 2008.
  6. ^ "How much has been pushed upstream?". openjdk.java.net. 20 September 2009. Archived from the original on 19 March 2012. Retrieved 7 March 2010. You don't need anymore those patches, with the latest FontManager push, everything is upstream now, so just use the Cacio repo, it's completely self contained.
  7. ^ a b Kennke, Roman (28 July 2011). "JDK7 and Cacio coolness". Retrieved 8 August 2011.
  8. ^ Eisserer, Clemens. "HTML5/Canvas backend for Caciocavallo (GNU-Classpath)". Archived from the original on 21 March 2012. Retrieved 8 August 2011.

외부 링크