what is java awt
이 Java AWT 튜토리얼은 Java의 Abstract Window Toolkit과 AWT Color, Point, Graphics, AWT vs Swing 등과 같은 관련 개념을 설명합니다.
이전 튜토리얼 중 하나에서 기본 GUI 용어를 소개했습니다. 이 자습서에서는 'AWT Framework'라는 Java에서 가장 오래된 GUI 프레임 워크 중 하나에 대해 설명합니다. AWT는 'Abstract Window Toolkit'의 약식입니다.
AWT는 Java로 GUI 애플리케이션을 생성하기위한 API입니다. 이는 플랫폼에 의존하는 프레임 워크입니다. 즉, AWT에 속하는 GUI 구성 요소는 모든 플랫폼에서 동일하지 않습니다. 플랫폼의 기본 모양과 느낌에 따라 AWT 구성 요소의 모양과 느낌도 변경됩니다.
학습 내용 :
JAVA AWT (Abstract Window Toolkit)
Java AWT는 네이티브 플랫폼의 서브 루틴을 호출하여 구성 요소를 만듭니다. 따라서 AWT GUI 응용 프로그램은 Windows에서 실행되는 동안 Windows OS의 모양과 느낌을 가지며 Mac에서 실행되는 경우에는 Mac OS의 모양과 느낌을 갖게됩니다. 이것은 Abstract Window Toolkit 애플리케이션의 플랫폼 종속성을 설명합니다.
플랫폼 의존성과 구성 요소의 무거운 특성으로 인해 요즘 Java 응용 프로그램에서 거의 사용되지 않습니다. 게다가 가볍고 플랫폼에 독립적 인 Swing과 같은 새로운 프레임 워크도 있습니다.
Swing은 AWT와 비교할 때 더 유연하고 강력한 구성 요소를 가지고 있습니다. Swing은 Abstract Window Toolkit과 유사한 구성 요소를 제공하며 나무, 탭 패널 등과 같은 고급 구성 요소도 포함합니다.
하지만 여기서 주목해야 할 것은 자바 스윙 프레임 워크 AWT를 기반으로합니다. 즉, Swing은 향상된 API이며 Abstract Window Toolkit 프레임 워크를 확장합니다. 따라서 Swing 튜토리얼로 이동하기 전에이 프레임 워크에 대한 개요를 살펴 보겠습니다.
AWT 계층 및 구성 요소
이제 Java의 Abstract Window Toolkit 계층 구조가 어떻게 보이는지 살펴 보겠습니다.
다음은 Java의 AWT 계층 다이어그램입니다.
위의 그림에서 볼 수 있듯이 루트 AWT 구성 요소 'Component'는 'Object'클래스에서 확장됩니다. 컴포넌트 클래스는 Label, Button, List, Checkbox, Choice, Container 등을 포함한 다른 컴포넌트의 상위입니다.
컨테이너는 패널과 창으로 더 나뉩니다. Applet 클래스는 Panel에서 파생되는 반면 Frame 및 Dialog는 Window 구성 요소에서 파생됩니다.
이제 이러한 구성 요소에 대해 간단히 설명하겠습니다.
구성 요소 클래스
Component 클래스는 계층 구조의 루트입니다. 구성 요소는 추상 클래스이며 현재 배경 및 전경색과 현재 텍스트 글꼴을 담당합니다.
구성 요소 클래스는 시각적 구성 요소 속성 및 특성을 캡슐화합니다.
컨테이너
컨테이너 AWT 구성 요소에는 텍스트, 레이블, 버튼, 테이블, 목록 등과 같은 다른 구성 요소가 포함될 수 있습니다. 컨테이너는 GUI에 추가 된 다른 구성 요소에 대한 탭을 유지합니다.
패널
패널은 Container 클래스의 하위 클래스입니다. 패널은 구체적인 클래스이며 제목, 테두리 또는 메뉴 모음을 포함하지 않습니다. 다른 구성 요소를 담는 컨테이너입니다. 한 프레임에 둘 이상의 패널이있을 수 있습니다.
창 클래스
Windows 클래스는 최상위 수준의 창이며 프레임 또는 대화 상자를 사용하여 창을 만들 수 있습니다. 창에는 테두리 나 메뉴 모음이 없습니다.
틀
프레임은 Window 클래스에서 파생되며 크기를 조정할 수 있습니다. 프레임은 버튼, 레이블, 필드, 제목 표시 줄 등과 같은 다양한 구성 요소를 포함 할 수 있습니다. 프레임은 대부분의 Abstract Window Toolkit 응용 프로그램에서 사용됩니다.
자바 8 인터뷰 질문 및 답변
프레임은 두 가지 방법으로 만들 수 있습니다.
# 1) Frame 클래스 개체 사용
여기에서는 Frame 클래스를 인스턴스화하여 Frame 클래스 개체를 만듭니다.
프로그래밍 예제는 다음과 같습니다.
import java.awt.*; class FrameButton{ FrameButton (){ Frame f=new Frame(); Button b=new Button('CLICK_ME'); b.setBounds(30,50,80,30); f.add(b); f.setSize(300,300); f.setLayout(null); f.setVisible(true); } public static void main(String args()){ FrameButton f=new FrameButton (); } }
산출:
# 2) 프레임 클래스 확장
여기에서 Frame 클래스를 확장하는 클래스를 만든 다음 생성자에서 프레임의 구성 요소를 만듭니다.
이것은 아래 프로그램에 나와 있습니다.
import java.awt.*; class AWTButton extends Frame{ AWTButton (){ Button b=new Button('AWTButton'); b.setBounds(30,100,80,30);// setting button position add(b);//adding button into frame setSize(300,300);//frame size 300 width and 300 height setLayout(null);//no layout manager setVisible(true);//now frame will be visible, by default not visible } public static void main(String args()){ AWTButton f=new AWTButton (); } }
산출:
AWT 색상 클래스
위에 표시된 AWT 출력에는 배경 및 전경에 대한 기본 색상이 있습니다. Abstract Window Toolkit은 구성 요소에 색상을 만들고 설정하는 데 사용되는 Color 클래스를 제공합니다. 구성 요소 속성을 통해 프레임 워크를 사용하여 구성 요소에 색상을 설정할 수도 있습니다.
Color 클래스를 사용하면 프로그래밍 방식으로 동일한 작업을 수행 할 수 있습니다. 이를 위해 Color 클래스는 RGBA 색상 모델 (RGBA = RED, GREEN, BLUE, ALPHA) 또는 HSB (HSB = HUE, SATURATION, BRIComponents) 모델을 사용합니다.
이 튜토리얼의 범위를 벗어나므로이 클래스의 세부 사항은 다루지 않을 것입니다.
다음 표에는 Color 클래스에서 제공하는 다양한 메서드가 나열되어 있습니다.
생성자 / 메소드 | 기술 |
---|---|
getBlue () | 0-255 범위의 파란색 구성 요소를 반환합니다. |
밝게 () | 현재 색상의 더 밝은 버전을 만듭니다. |
createContext (ColorModel cm, Rectangle r, Rectangle2D r2d, AffineTransform x, RenderingHints h) | 새로운 PaintContext를 반환합니다. |
어둡게 () | 현재 색상의 더 어두운 버전을 만듭니다. |
디코드 (문자열 nm) | 문자열을 정수로 변환하여 지정된 불투명 색상을 반환합니다. |
같음 (Object obj) | 주어진 색상 객체가 현재 객체와 같은지 확인합니다. |
getAlpha () | 0-255 범위의 색상의 알파 값을 반환합니다. |
getColor (문자열 nm) | 시스템 속성에서 색상을 반환합니다. |
getColor (문자열 nm, 색상 v) | |
getColor (문자열 nm, 정수 v) | |
getColorComponents (ColorSpace cspace, float () compArray) | 지정된 ColorSpace의 색 구성 요소를 포함하는 float 유형의 배열을 반환합니다. |
getColorComponents (float () compArray) | Color의 ColorSpace에서 색상 구성 요소를 포함하는 float 유형의 배열을 반환합니다. |
getColorSpace () | 현재 Color의 ColorSpace를 반환합니다. |
getGreen () | 기본 sRGB 공간에서 0-255 범위의 녹색 구성 요소를 반환합니다. |
getRed () | 기본 sRGB 공간에서 0-255 범위의 빨간색 구성 요소를 반환합니다. |
getRGB () | 기본 sRGB ColorModel에서 현재 색상의 RGB 값을 반환합니다. |
getHSBColor (float h, float s, float b) | 지정된 값으로 HSB 색상 모델을 사용하여 Color 객체를 만듭니다. |
getTransparency () | 이 Color의 투명도 값을 리턴합니다. |
해시 코드() | 이 Color의 해시 코드를 반환합니다. |
HSBtoRGB (float h, float s, float b) | 주어진 HSB를 RGB 값으로 변환 |
RGBtoHSB (int r, int g, int b, float () hsbvals) | 주어진 RGB 값을 HSB 값으로 변환합니다. |
자바의 AWT 포인트
Point 클래스는 위치를 나타내는 데 사용됩니다. 위치는 2 차원 좌표계에서 가져옵니다.
행동 양식 | 기술 |
---|---|
toString () | 포인트의 문자열 표현을 반환합니다. |
equals (객체) | 두 점이 같은지 확인하십시오. |
getLocation () | 현재 지점의 위치를 반환합니다. |
해시 코드() | 현재 지점의 해시 코드를 반환합니다. |
이동 (int, int) | 주어진 지점을 (x, y) 좌표계의 주어진 위치로 이동합니다. |
setLocation (int, int) | 포인트 위치를 지정된 위치로 변경합니다. |
setLocation (점) | 점의 위치를 지정된 위치로 설정합니다. |
번역 (int, int) | 현재 점을 x + dx, y + dy를 가리 키도록 변환합니다. |
AWT 그래픽 클래스
응용 프로그램에서 구성 요소를 그리는 Abstract Window Toolkit의 모든 그래픽 컨텍스트는 Graphics 클래스에서 파생됩니다. Graphics 클래스 개체에는 작업을 렌더링하는 데 필요한 상태 정보가 포함되어 있습니다.
상태 정보에는 일반적으로 다음이 포함됩니다.
- 어떤 구성 요소를 그릴 것인가?
- 좌표 렌더링 및 클리핑.
- 현재 색상, 글꼴 및 클립입니다.
- 논리 픽셀의 현재 작업입니다.
- 현재 XOR 색상
Graphics 클래스의 일반적인 선언은 다음과 같습니다.
public abstract class Graphics extends Object
AWT 헤드리스 모드 및 헤드리스 예외
그래픽 기반 응용 프로그램으로 작업해야하지만 실제 키보드, 마우스 또는 디스플레이없이 작업해야하는 요구 사항이있는 경우이를 '헤드리스'환경이라고합니다.
JVM은 이러한 헤드리스 환경을 인식해야합니다. Abstract Window Toolkit을 사용하여 헤드리스 환경을 설정할 수도 있습니다.
다음과 같이이를 수행하는 특정 방법이 있습니다.
#1) 프로그래밍 코드를 사용하여 시스템 속성 'java.awt.headless'를 true로 설정합니다.
#두) 명령 줄을 사용하여 다음 헤드리스 모드 속성을 true로 설정합니다.
java -Djava.awt.headless = true
#삼) 서버 시작 스크립트를 사용하여 'JAVA_OPTS'라는 환경 변수에 '-Djava.awt.headless = true'를 추가합니다.
환경이 헤드리스이고 디스플레이, 키보드 또는 마우스에 의존하는 코드가 있고이 코드가 헤드리스 환경에서 실행되면 'HeadlessException'예외가 발생합니다.
HeadlessException의 일반적인 선언은 다음과 같습니다.
public class HeadlessException extends UnsupportedOperationException
예를 들어 이미지 기반 이미지 로그인이 필요한 애플리케이션에서는 헤드리스 모드를 사용합니다. 예를 들면 로그인 할 때마다 또는 페이지를 새로 고칠 때마다 이미지를 변경하려는 경우 이러한 경우 이미지를로드하고 키보드, 마우스 등이 필요하지 않습니다.
자바 AWT 대 스윙
이제 Java AWT와 Swing의 몇 가지 차이점을 살펴 보겠습니다.
AWT | 그네 |
---|---|
AWT는 각 구성 요소에 해당하는 운영 체제의 21 개의 피어 또는 위젯과 함께 작동합니다. | Swing은 Window Object 인 하나의 피어에서만 작동합니다. 다른 모든 구성 요소는 Window 개체 내부에서 Swing에 의해 그려집니다. |
AWT는 'Abstract Windows Toolkit'을 의미합니다. | Swing은 JFC (Java Foundation Classes)에서 파생됩니다. |
AWT는 운영 체제의 서브 루틴에 대한 서브 루틴 호출을 직접 수행하므로 AWT 구성 요소는 무겁습니다. | 스윙 구성 요소는 AWT 위에 작성되므로 구성 요소가 가볍습니다. |
AWT 구성 요소는 java.awt 패키지의 일부입니다. | 스윙 컴포넌트는 javax.swing 패키지의 일부입니다. |
AWT는 플랫폼에 따라 다릅니다. | Swing 구성 요소는 Java로 작성되며 플랫폼에 독립적입니다. |
AWT에는 모양과 느낌이 없습니다. 실행되는 플랫폼의 모양과 느낌을 조정합니다. | 스윙은 자체적으로 다른 모양과 느낌을 제공합니다. |
AWT에는 기본 기능 만 있으며 테이블, 탭 패널 등과 같은 고급 기능은 지원하지 않습니다. | Swing은 JTabbed 패널, JTable 등과 같은 고급 기능을 제공합니다. |
AWT는 플랫폼에 따라 달라지는 운영 체제 위에있는 얇은 클래스 레이어만큼 좋습니다. | 스윙은 더 크고 풍부한 기능도 포함합니다. |
AWT는 우리가 많은 것을 작성하게합니다. | 스윙에는 대부분의 기능이 내장되어 있습니다. |
자주 묻는 질문
Q # 1) Java에서 AWT는 무엇입니까?
API 테스트 인터뷰 질문 및 답변
대답: Java의 AWT는 Swing 프레임 워크에 선행하는 플랫폼 종속 그래픽 사용자 인터페이스 프레임 워크 인 'Abstract Window Toolkit'이라고도합니다. Java 표준 GUI API, Java Foundation Classes 또는 JFC의 일부입니다.
Q # 2) Java AWT가 여전히 사용됩니까?
대답: 여전히 사용되는 몇 가지 구성 요소를 제외하고는 Java에서 거의 쓸모가 없습니다. 또한 AWT를 사용하는 이전 플랫폼에서 실행되는 일부 오래된 응용 프로그램이나 프로그램이 여전히 있습니다.
Q # 3) Java에서 AWT와 Swing은 무엇입니까?
대답: Abstract Window 툴킷은 Java로 GUI 애플리케이션을 개발하기위한 플랫폼 종속 API입니다. 반면 Swing은 GUI 개발을위한 API이며 JFC (Java Foundation Classes)에서 파생됩니다. AWT 구성 요소는 무겁고 Swing 구성 요소는 가볍습니다.
Q # 4) Java AWT의 프레임은 무엇입니까?
대답: 프레임은 제목과 테두리가있는 최상위 구성 요소 창으로 정의 할 수 있습니다. 프레임에는 기본 레이아웃으로 '테두리 레이아웃'이 있습니다. 프레임은 또한 Close, Opened, Closing, Activate, Deactivated 등과 같은 Windows 이벤트를 생성합니다.
Q # 5) Import Java AWT 란 무엇입니까?
대답: Import Java AWT (import java.awt. *)는 TextFields, Buttons, Labels, List 등과 같은 구성 요소를 사용할 수 있도록 프로그램에 AWT API의 기능이 필요함을 나타냅니다.
결론
이 튜토리얼에서는 Java에서 GUI 개발을위한 플랫폼 종속 API 인 Abstract Window Toolkit의 개요에 대해 설명했습니다. Java에서는 거의 사용되지 않으며 Swings 및 JavaFX와 같은 다른 API로 대체되고 있습니다.
Abstract Window Toolkit의 모든 구성 요소는 현재 거의 사용되지 않기 때문에 자세히 다루지 않았습니다. 따라서 프레임, 색상 등과 같은 구성 요소와 AWT를 사용하여 설정된 헤드리스 모드에 대해서만 설명했습니다.
다음 자습서에서는 Java Swing 자습서로 시작하고 오늘날 대부분의 Java 응용 프로그램이 GUI 개발을 위해 Swing을 사용하므로 이에 대해 자세히 설명합니다.