AWT 컴포넌트 (1) 1. AWT 패키지 2. AWT 프로그램과이벤트 3. Component 클래스 4. 컴포넌트색칠하기 AWT GUI 를만들기위한 API 윈도우프로그래밍을위한클래스와도구를포함 Graphical User Interface 그래픽요소를통해프로그램과대화하는방식 그래픽요소를 GUI 컴포넌트라함
윈도우프로그램만들기 간단한 AWT 프로그램 import java.awt.*; class MyFrame extends Frame { public MyFrame(String title) { super(title); this.setsize(400, 300); this.setvisible(true); public class HelloAWT1 { public static void main(string args[]) { MyFrame myframe = new MyFrame("Hello AWT"); 익명클래스의사용 import java.awt.*; public class HelloAWT3 { public static void main(string args[]) { Frame myframe = new Frame("Hello AWT") { public void paint(graphics g) { g.drawstring("hello AWT", 150, 150); ; myframe.setsize(400, 300); myframe.setvisible(true);
이벤트처리하기 이벤트처리과정의예 종료버튼클릭 이벤트가발생하며, 이벤트소스에게전달됨 이벤트처리기가등록되어있는경우, 이벤트처리기가자동실행됨 this.addwindowlistener(new MyListener()); import java.awt.*; import java.awt.event.*; class MyListener implements 원소 WindowListener 탐색방법 { public void windowclosing(windowevent ev) { System.exit(0); for-each public void windowactivated(windowevent 구문 ev) { class MyFrame extends Frame { public MyFrame(String title) { super(title); this.setsize(400, 300); this.setvisible(true); this.addwindowlistener(new MyListener()); public void paint(graphics g) { g.drawstring("hello AWT", 150, 150); public class HelloAWT4 { public static void main(string args[]) { MyFrame myframe = new MyFrame("Hello AWT");
AWT 패키지의 GUI 컴포넌트 클래스유형 GUI 컨트롤컴포넌트배치그래픽출력컨테이너 클래스 Button, Label, Canvas, Choice, Checkbox 등 BorderLayout, FlowLayout, GridLayout 등 Color, Font, Point, Graphics, Image 등 Panel, Frame, Window 등 클래스계층구조 Component Button Canvas Checkbox Choice Label List Scrollbar Container TextComponent scrollpane Panel Window TextArea TextField Dialog Frame FileDialog
기타 AWT 의클래스들 Dimension 컴포넌트의너비와높이를저장 (width, height) Rectangle 사각형정보의저장 (x, y, width, height) Point 2 차원상의점을저장 (x, y) 기타 AWT 의클래스들 Color 색상을표현하기위한클래스 Color.WHITE, Color.balck, Color.BLUE Cursor 마우스커서의모양설정 Cursor.HAND_CURSOR 등 Font 문자출력에사용되는글자체를표현 이름, 스타일, 크기 Graphics 그래픽정보의저장
Component 클래스 메뉴를제외한 AWT 컴포넌트들의최상위추상클래스 컴포넌트들의기본메소드들을정의 중량컴포넌트 클래스가플랫폼에의존하는피어컴포넌트들로매핑됨 AWT 컴포넌트경량컴포넌트 자바시스템자체에서처리 Swing 컴포넌트 Component 클래스의메소드 위치및크기관련메소드 Rectangle getbounds() void setlocation(point p) void setbounds(rectangle r) void setpreferredsize(dimension psize) 그래픽관련메소드 Color getforeground(), void setforeground(color c) Font getfont(), void setfont(font f) boolean isvisible()
컴포넌트색칠하기 색칠연산의유발 시스템의의해 컴포넌트가화면에처음등장했을때 크기가변하거나가려졌던부분이드러날때 프로그램에의해 다시칠해야할상황이될때 알고리즘에의해필요한경우 paint( ) 메소드 시스템에의해색칠하기가유발된경우자동호출되는콜백메소드 프로그램에서직접호출하지않음 Component또는 Container 클래스의 paint를재정의하여사용해야함 public void paint(graphics g) 매개변수 (Graphics 객체 ) : 컴포넌트가화면에그려질때사용되는그래픽관련정보가이미설정됨
repaint( ) 메소드 프로그램에의해색칠하기가필요한경우호출함 Component 클래스의 repaint를그대로사용하는것이일반적임 경량컴포넌트인경우 paint() 를호출 중량컴포넌트인경우 update() 를호출 update( ) 메소드 repaint() 에의해호출됨 재정의하지않은경우배경을다시칠하고 paint() 을호출함 ( 중량컴포넌트 ) 재정의하는경우필요한부분만다시그리면효과적
Update( ) 활용예 public class UpdateDemo { public static void main(string[] args) { Frame f1 = new Frame("Flash Clicker"); f1.add(new ClickCanvas(new Vector()), BorderLayout.CENTER); f1.pack();f1.show(); Frame f2 = new Frame("Smooth Clicker"); f2.add(new SmoothCanvas(new Vector()), BorderLayout.CENTER); f2.pack(); Rectangle f1rect = f1.getbounds(); f2.setlocation(f1rect.x+f1rect.width, f1rect.y); f2.show(); class ClickCanvas extends Canvas { public void paint(graphics g) { paintbackdrop(g); vectorspainted = 0; for(int i = 0 ; i < points.size()-1; i++) { paintvector(g, i); class SmoothClickCanvas extends ClickCanvas { public SmoothClickCanvas(Vector points) {super(points); public void update(graphics g) { for (int i = vectorspainted; i < points.size()-1; i++) { paintvector(g, i);
Window 클래스 Window 최상위수준의컨테이너 다른컨테이너의사각영역에포함될수없음 제목이나테두리가없으며메뉴바를가지지않음 생성자 Window(Frame owner), Window(Window owner) Frame 클래스 Frame 최상위수준의컨테이너 부모컴포넌트를가지지못함 제목과테두리가있으며메뉴를가질수있음 기본레이아웃은 BorderLayout