자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민
java.awt Package java.awt 패키지는자바애플리케이션프로그래밍인터페이스 (API : Application Programming Interface) 의일부로서그래픽처리를담당하는컴포넌트들을포함합니다. 즉, 화면상에윈도우를그리고, 그위에버튼이나텍스트필드등을붙이는데필요한 GUI 프로그래밍도구와이에관련된기능을제공합니다. 따라서, 응용프로그램개발자는이러한그래픽처리를위한컴포넌트를사용하여애플리케이션의그래픽사용자인터페이스 (GUI : Graphical User Interface) 를개발할수있습니다. AWT란 Abstract Window Toolkit의약자인데, Abstract 라는단어가붙은이유는이패키지를이용하여특정한운영체제에서만수행되는 GUI 프로그램을작성하는것이아니라, 자바프로그램이수행되는어떤운영체제에서든지수행되는 GUI 프로그램을작성할수있기때문입니다. 2
출제기준 1. 컴포넌트 (java.awt.component) 의배경색, 전경색, 크기, 활성 / 비활성화등의속성을조정하는 setbackground(), setforeground(), setenabled(boolean), setvisible(boolean) 메소드의사용법을확실히이해합니다. 따라서, 모양이제시되어있고, 크기가변경되었을때의처리방식이결정되어있는 GUI 를화면에표시하는코드를작성할수있어야합니다. 2. GUI 컴포넌트들 (button, Canvas, Checkbox, Choice, Label, List, Scrollbar, TextField, TextArea) 을사용한코드를작성할수있어야합니다. 3
출제기준 3. 이벤트처리를위한리스너클래스와메소드를작성하고, 리스너메소드안에서 Event 인수를이용하여이벤트가발생한 Component 는무엇이고, 이벤트발생시마우스의위치는어디며, 이벤트의본질은무엇인지등에대한정보를추출할수있어야합니다. 4. menu 관련컴포넌트들 (MenuComponent, MenuBar, MenuItem, Menu, CheckboxMenuItem, PopupMenu) 의상속관계를알고설명할수있어야합니다. 4
AWT 개요 자바의추상화윈도우툴킷 (AWT : Abstract Window Toolkit) 은그래픽사용자인터페이스를갖는프로그램을작성할때필요로하는클래스및툴을제공합니다. 추상화 (abstract) 라는용어는자바가실행되는여러플랫폼에서공통적으로작동할수있도록다는하였다는점에서붙여졌습니다. 자바프로그램을작성할당시에는추상적인컴포넌트를사용하지만이것이실제로특정플랫폼에서실행될때해당플랫폼에적절한부가적인코드가합쳐져실현되기때문입니다. 5
AWT 개요 자바에서그래픽사용자인터페이스 (GUI : Graphic User Interface) 를위해필요로하는 3 가지개념은다음과같습니다. 컴포넌트 (Component) : 사용자가화면에서볼수있는버튼 (Button) 이나텍스트필드 (TextField) 등과같이사용자와상호작용을하는객체입니다. 이벤트핸들링, 컴포넌트크기조정, 폰트와컬러조정, 컴포넌트의화면표시등의기능을가집니다. 6
AWT 개요 컨테이너 (Container) : 다른컴포넌트들을관리하거나포함할수있는객체로레이아웃의속성을가지며프레임 (Frame), 패널 (Panel) 등이있습니다. 컴포넌트나또다른컨테이너를포함할수있습니다. 이벤트 (Event) : 이벤트는사용자의특정한행위 ( 키누름, 마우스클릭등 ) 에의해서발생합니다. 따라서, 우리가 GUI 를구현한다고한다면컴포넌트를생성하여이를컨테이너에결합시킨뒤발생하는이벤트를처리할수있도록하는작업을의미합니다. 7
AWT 개요 일반적으로, 애플리케이션을작성할때에는 Frame 오브젝트를생성하고, Buton, Label, TextField 등각종 Component 오브젝트나 Panel 과같은또다른 Container 오브젝트를붙이게됩니다. 참고로, Frame 은애플리케이션의기본 Window 이기때문에풀다운메뉴를설정할수있지만, Frame 위에다른 Frame 을붙일수는없습니다. 8
AWT 개요 다음그림은 AWT 패키지에있는각클래스의상속관계와특징을요약한것입니다. 그림에서패널 (Panel) 클래스는컨테이너클래스를상속받고있는것을확인할수있습니다. 따라서, 컴포넌트들혹은다른패널들을포함할수있습니다. 부분적으로 Layout 을적용할때많이활용합니다. 애플릿 (Applet) 클래스는웹브라우저에서실행될수있도록한자바애플릿의기본클래스입니다. 역시패널클래스를상속받으므로컴포넌트혹은또다른패널을포함할수있습니다. 9
AWT 개요 10
컴포넌트 Object 클래스를직접상속받는클래스로서모든 AWT 컴포넌트클래스들의부모클래스입니다. 마우스나키입력등의이벤트에반응하며, 폰트, 그래픽등에관련된도구등윈도우에관련된일반적인메소드들을가지고있습니다. 여기서는컴포넌트클래스가가지는몇가지중요한메소드들에관하여알아보도록하겠습니다. void setsize(int width, int height); void setsize(dimension d); Dimension getsize(); 11
컴포넌트 getsize() 메소드는컴포넌트의크기를픽셀 (pixel) 단위로돌려줍니다. 반대로, setsize() 메소드는컴포넌트의크기를설정하는데사용됩니다. 실제로, setsize(80, 60); 과같이사용하면현재컴포넌트의폭과높이를 80 과 60 으로각각설정하는것입니다. int setforeground(color c); int setbackground(color c); 12
컴포넌트 setforeground() 와 setbackground() 메소드는컴포넌트의전경색 (foreground color) 과배경색 (Background color) 를설정하기위한메소드입니다. 이들메소드의인수로는다음과같은정적 (static) 변수들이올수있습니다. 예를들어, setforeground(color.black); 과같이사용하면현재컴포넌트의전경색을검정색으로설정하는것입니다. Color.black Color.orange Color.magenta Color.red Color.yellow Color.cyan Color.pink Color.green Color.blue 13
컴포넌트 Color 클래스는 srgb color space 에서디폴트컬러를정의하고있습니다. 위는이들중몇가지를골라나열한것입니다. 컴포넌트는내부에쓰여질문자열에사용될폰트를지정할수있도록합니다. Font getfont(); void setfont(font f); 14
컴포넌트 setfont() 메소드는해당컴포넌트의렌더링에사용할특정폰트를지정합니다. 예를들어, setfont(new Font("SanSerif", Font.PLAIN, 14)); 와같이사용할수있습니다. 익명 (anonymous) 클래스로사용한 Font 클래스는생성자로폰트이름, 스타일, 크기의인자를받으며여기서는 산세리프 (SanSerif)" 체를보통모양의 14 포인트로설정하였습니다. Point getlocation(); void setlocation(int x, int y); void setlocation(point p); 15
컴포넌트 setlocation() 메소드는컴포넌트의왼쪽위좌표의위치를지정합니다. getlocation() 메소드는현재컴포넌트의위치를반환합니다. Point 클래스는생성자로 x, y 좌표를받아하나의객체로생성하여줍니다. 16
기본예제 이예제에서는 AWT 를이용하여 Frame 위에 Button 을붙이는기본적인 GUI 애플리케이션을작성해봅니다. import java.awt.*; public class AwtApp extends Frame { Button b; public static void main(string[ ] args) { AwtApp a = new AwtApp("AWT 예제 "); a.display( ); AwtApp(String title) { super(title); b = new Button(" 예 "); void display( ) { add(b); pack( ); setvisible(true); 17
예제설명 이예제에서는 AWT 를이용하여 Frame 위에 Button 을붙이는기본적인 GUI 애플리케이션을작성했습니다. 우리가작성하는클래스가 Frame 에서상속받은형태이므로 (3 행 ), 21, 23, 24 행에서 Frame 클래스에서상속받은메소드를직접호출할수있었습니다. 이프로그램에서는 setsize( ) 대신에 pack( ) 메소드를사용했는데, pack( ) 메소드는포함하고있는 Component 들을표현하기에적당한 Frame 의크기를자동계산해서설정해줍니다. 18
기본예제 import java.awt.*; public class AwtApp2 { Frame f; Button b; public static void main(string[ ] args) { AwtApp2 a = new AwtApp2("AWT 예제 2"); a.display( ); AwtApp2 (String title) { f = new Frame(title); b = new Button(" 예 "); void display( ) { f.add(b); f.setsize(100,100); f.setvisible(true); 19
기본예제 이예제에서는 AWT 를이용하여 Frame 위에 Button 을붙이는기본적인 GUI 애플리케이션을작성하되, Frame 형멤버변수를선언한다음 (5 행 ), 초기화하여사용했습니다 (16 행 ). 21, 23, 24 행에서 Frame 클래스에대한핸들변수 f 를이용하여메소드를호출했습니다. 20
실전문제 import java.awt.*; public class AwtComponents extends Frame { Button b; Label la; TextArea ta; TextField tf; Checkbox cb; Choice c; List li; public static void main(string[ ] args) { AwtComponents ac = new AwtComponents("AWT Components"); ac.display( ); AwtComponents(String title) { super(title); b = new Button(" 버튼 "); la = new Label(" 라벨 "); ta = new TextArea(" 텍스트에리어 ", 5, 20); tf = new TextField(" 텍스트필드 ", 20); cb = new Checkbox(" 체크박스 "); c = new Choice( ); li = new List(2, false); 21
실전문제 void display( ) { setlayout(new FlowLayout( )); add(b); add(la); add(ta); add(tf); add(cb); c.add("green"); c.add("red"); c.add("blue"); add(c); li.add("mercury"); li.add("venus"); li.add("earth"); li.add("mars"); add(li); pack( ); setvisible(true); 22