상세 컨텐츠

본문 제목

[강좌] 애플릿 프로그래밍 3

프로그래밍/JAVA

by 라제폰 2009. 1. 30. 17:56

본문

[강좌] 애플릿 프로그래밍 3

이글은 잠탱이 3인방님들의 글입니다.
저자와의 협의없이 함부로 Reposting될 수 없음을 알려드립니다.

<FONT face=굴림 size=2>3. Drawing과 Event Handling을 위한 메쏘드 오늘은 우선 애플렛에 색깔을 넣어보도록 하겠습니다. 예제로 썼었던 Simple 애플렛과 EventTutor 애플렛 기억하시죠(???) 아래에 있는 코드는 그 예제들을 합쳐서 쬐금(?) 수정한 것입니다. // ColorApp.java 1: import java.awt.*; 2: import java.applet.Applet; 3: 4: public class ColorApp extends Applet { 5: Rectangle r = new Rectangle(10, 10, 100, 100); 6: 7: public voidinit() { 8: resize(400, 400); 9: } 10: 11: public void paint(Graphics g) { 12: g.drawRect(r.x, r.y, r.width, r.height); 13: g.setColor(Color.red); 14: g.fillRect(r.x, r.y, r.width, r.height); 15: } 16: 17: public boolean mouseMove(Event e, int x, int y) { 18: r.move(x, y); 19: repaint(); 20: return true; 21: } 22: 23: public boolean mouseDown(Event e, intx, int y) { 24: setBackground(new Color(x%256, y%256, (x+y)%256)); 25: repaint(); 26: return true; 27: } 28: 29: public boolean mouseDrag(Event e, int x, int y) { 30: r.reshape(x, y, transx(x), transy(y); 31: repaint(); 32: return true; 33: } 34: 35: public int transx(int x) { 36: return r.width = r.width + (r.x - x); 37: } 38: 39: public int transy(int y) { 40: return r.height = r.height + (r.y - y); 41: } 42: } // ColorApp.html 이젠 HTML 문서 작성은 설명안해도 아시겠죠?? 그럼 생각하신데로 작성 해 보세요. 그리고 이후 예제부터는 기본적으로 사용되는 HTML문서 작성 방법은 제외하도록 하겠습니다. ColorApp 애플렛을 분석해보도록 하죠. 우선 색깔을 애플렛을 넣는 방법이 소스안에 포함되어 있습니다. 색깔은 배경색과 전경색이라고 하나?? 하여간 이 두가지를 정할 수 있습니다. 먼저 전경색은 13번째 라인에서와 같이 setColor(...) 메쏘드를 이용해서 지 정할 수 있습니다(이 메쏘드는 Graphics 클래스에). 사용하는 방법은 매개 변수로 색깔을 지정하는 Color객체를 넘겨줌으로써 색깔을 지정합니다. 색 깔 지정은 위의 예제에서와 같이 이미 Color 클래스에 선언되어있는 인스 턴스 변수를 사용해서 지정하거나(13번째 라인의 경우), 아니면 여러분이 RGB을 적절히 혼합해서 색깔을 지정할 수 있습니다(24번째 라인의 경우). Color클래스에 지정되어 있는 값들은 아래와 같습니다. white, lightGray, gray, darkGray, black, red, pink, orange, yellow, green, magenta, cyan, blue 이것은 Color 클래스내에 있는 Color(..) 메쏘드를 이용해서 RGB를 혼합해 서 이미 만들어 놓은 것들입니다. 따라서 여러분이 사용하고자 하는 색깔 이 위에 포함되어있지 않다면, 무궁 무진한 색깔(256*256*256=???)을 Color(...) 메쏘드를 이용해서 만들어 쓸 수 있습니다. 그 예가 24라인에 있 는 getBackground(....)의 매개변수에 사용되고 있습니다. 사용방법: new Color(red성분값, green성분값, blue성분값) 여기서 각 성분값은 0에서 255까지의 값을 갖고 있으며, 참고적으 로 white의 값은 Color(255, 255, 255) 입니다. 배경색은 setBackground(...)라는 메쏘드를 이용해서 지정할 수 있습니다. (이것은 setColor(...) 와는 달리 Component 클래스에 있음.) 매개 변수에 대한 설명은 위에!!! 위의 예에서는 저번 강좌시간에 설명드렸던 이벤트 중의 하나인 마우스의 Down 이벤트가 발생하면 배경색을 마우스 좌표에 의해 색깔을 설정하도 록 되어진 코드입니다.(마우스 버튼을 누를 때 마다 그 좌표에 해당하는 색깔이 배경색으로 지정됨, red값은 x좌표, green값은 y좌표, blue값은 x+y 좌표값으로 대입됩니다.) 5번째 라인의 Rectangle에 대해 알아 보도록 하죠. 이것은 awt의 Rectangle 클래스를 일컫는 것으로서 인스턴스 변수로 x, y, width, height 를 가지고 있습니다. 따라서 5번째 라인은 Rectangle 객체인 r을 선언하고, new Rectangle(10, 10, 100,100) 으로 생성, 초기화 시키고 있습니다. 따라 서 이 r은 Rectangle 클래스에 있는 메쏘드들을 사용해서 여러 변환 및 처 리를 할 수 있습니다. (paint(..)메쏘드에서 g. .... 을 사용했던 것 처럼) 위의 예에서는 move(....), reshape(...) 가 사용되어 있습니다. move(..)메쏘드는 말 그대로 사각형을 지정 좌표로 옮겨주는 것이고, reshape(..) 메쏘드는 지정된 좌표와 크기를 갖는 사각형을 다시 만드는 것 입니다. 이 밖에도 아래와 같은 메쏘드들이 Rectangle 클래스에 있습니다. ◎ translate 매쏘드 형식: public void translate(int x, int y) 매쏘드 설명: 지정된 x, y 만큼 this x, y 좌표를 이동시킵니다. 매 개 변 수: 이동시킬 x, y 크기 ◎ grow 매쏘드 형식: public void grow(int h, int v) 매쏘드 설명: 지정된 h, v 만큼 사각형을 수평, 수직으로 확장합니다. 매 개 변 수: 확장시킬 h, v 크기 ◎ resize 매쏘드 형식: public void resize(int width, int height) 매쏘드 설명: 지정된 width, height로 크기를 갖는 사각형으로 변경합니다. 매 개 변 수: 새로운 width, height ◎ inside 매쏘드 형식: public boolean inside(int x, int y) 매쏘드 설명: 지정된 포인트(x,y)가 사각형안에 존재하는지를 검사합니다. 매 개 변 수: 검사할 포인트 ◎ equals 매쏘드 형식: public boolean equals(Object obj) 매쏘드 설명: 두 개의 사각형들이 같은지를 검사합니다. Overrides: equals in class Object ◎ intersects 매쏘드 형식: public boolean intersects(Rectangle r) 매쏘드 설명: 지정한 사각형의 영역과 교차하는지를 검사합니다. ◎ intersection 매쏘드 형식: public Rectangle intersection(Rectangle r) 매쏘드 설명: 지정된 사각형의 영역과 교차되는 부분을 가지는 Rectangle 객체를 생성합니다. 예) Rectangle r1 = new Rectangle(10, 10, 100, 100); Rectangle r2 = new Rectangle(20, 20, 110, 110); Rectangle r = r1.intersection(r2); 여기서 r이 갖는 값은 new Rectangle(20,20,, 90, 90); 과 같습니다. ◎ union 매쏘드 형식: public Rectangle union(Rectangle r) 매쏘드 설명: 지정된 사각형의 영역과의 union 부분을 갖는 Rectangle 객체를 생성합니다. 예) Rectangle r1 = new Rectangle(10, 10, 100, 100); Rectangle r2 = new Rectangle(20, 20, 110, 110); Rectangle r = r1.union(r2); 여기서 r이 갖는 값은 new Rectangle(10,10,130,130); 과 같습니다. ◎ add 매쏘드 형식: public void add(int newx, int newy) 매쏘드 설명: 지정된 포인트(newx, newy)와 사각형을 포함하는 가장작 은 사각형을 만듭니다. 매 개 변 수: 추가할 포인트 매쏘드 형식: public void add(Point pt) 매쏘드 설명: 지정된 Point 객체 pt와 사각형을 포함하는 가장 작은 사 각형을 만듭니다. 매 개 변 수: 추가할 포인트 매쏘드 형식: public void add(Rectangle r) 매쏘드 설명: 지정한 사각형과의 union 을 구합니다. ◎ isEmpty 매쏘드 형식: public boolean isEmpty() 매쏘드 설명: 사각형의 width 또는 height가 0보다 작은지 검사합니다. 둘중 하나라도 0보다 작으면 true, 아니면 false입니다. ◎ hashCode 매쏘드 형식: public int hashCode() 매쏘드 설명: this Rectangle에 대한 hashcode를 리턴합니다. ◎ toString 매쏘드 형식: public String toString() 매쏘드 설명: this Rectangle의 값들을 나타내는 String을 리턴합니다. 이것으로써 Rectangle 클래스에 포함되어 있는 모든 메쏘드들을 설명한 것 같군요. 참고적으로 awt 에는 Rectangle 클래스와 비슷한 Point 클래스와 Polygon 클래스가 있으니 관심 있으신 분들은 찾아보시기 바랍니다. ------------------------------ 3. UI(User Interface) component를 추가하기 위한 메쏘드들 그럼 이번에는 본격적으로 UI를 구현하기 위한 예제를 살펴보도록 하죠. AWT 에는 자바가 제공하는 UI component들이 존재합니다. 아래에는 그 종류와 해당하는 클래스들 입니다. 1) buttons(java.awt.Buttons) 2) checkboxes(java.awt.Checkbox) 3) single-line text fields(java.awt.TextField) 4) larger text display and editing areas(java.awt.TextArea) 5) labels(java.awt.Label) 6) lists(java.awt.List) 7) pop-up lists of choices(java.awt.Choice) 8) scrollbars(java.awt.Scrollbar) 9) drawing areas(java.awt.Canvas) 10) menus(java.awt.Menu, java.awt.MenuItem, java.awt.CheckboxMenuItem) 11) containers(java.awt.Panel, java.awt.Window 와 이것의 서브클래스들) 하지만 위에 있는 UI를 애플렛에서사용하기 위해서는 필요한 매쏘드들이 있습니다. 필요한 매쏘드들은 Container 클래스에 있는데, Applet 클래스가 AWT Container 클래스로 부터 상속받기 때문에 위에있는 component들을 Applet에 첨가시키는 것은 쉽게 가능해집니다. 그리고 각 Applet은 layout manager를 갖고 있는데, 이것들은 component 를 화면에 어떻게 배치할 것인가를 결정합니다.(무신 말인지 모르시는 분 포기하지 마시구, 예제로 설명할테니깐 그냥 이런게 있구나 하고 보시길...) 그렇다면 무엇이 필요한 매쏘드인가??? 아래에 애플렛에 component들을 포함시키고 위치시키기 위해서 사용될 수 있는 메쏘드들을 간단히(?) 설명했으며, 이것들은 예제를 통해서 익혀나가 도록 하겠습니다. ◎ add 매쏘드 형식: public Component add(Component comp) 매쏘드 설명: this container에 지정한 component를 첨가합니다. 매쏘드 형식: public synchronized Component add(Component comp, int pos) 매쏘드 설명: this container에 지정한 component를 지정 위치 pos에 첨가합니다. 매쏘드 형식: public synchronized Component add(String name, Component comp) 매쏘드 설명: this container에 지정된 component를 첨가하고, 또한 지정된 name을 사용하는 this container의 layout manager에 지정 component를 첨가합니다. ◎ remove 매쏘드 형식: public synchronized void remove(Component comp) 매쏘드 설명: this container에서 지정한 component를 제거합니다. ◎ removeAll 매쏘드 형식: public synchronized void removeAll() 매쏘드 설명: this container에 있는 모든 component를 제거합니다. ◎ getComponent 매쏘드 형식: public synchronized Component getComponent(int n) 매쏘드 설명: this container에 있는 n번째 component를 획득합니다. ◎ getComponents 매쏘드 형식: public synchronized Component[] getComponents() 매쏘드 설명: this container에 있는 모든 component를 획득합니다. ◎ countComponents 매쏘드 형식: public int countComponents() 매쏘드 설명: this panel에 있는 component의 갯수를 리턴합니다. ◎ getLayout 매쏘드 형식: public LayoutManager getLayout() 매쏘드 설명: this container를 위해서 layout manager를 획득합니다. ◎ setLayout 매쏘드 형식: public void getLayout(LayoutManager mgr) 매쏘드 설명: this container를 위해서 layout manager를 설정합니다. ◎ layout 매쏘드 형식: public synchronized layout() 매쏘드 설명: this container에서 layout을 적용합니다. ◎ preferredSize 매쏘드 형식: public synchronized Dimension preferredSize() 매쏘드 설명: this Container의 추천크기를 리턴합니다. ◎ minimumSize 매쏘드 형식: public synchronized Dimension minimumSize() 매쏘드 설명: this Container의 최소크기를 리턴합니다. ◎ locate 매쏘드 형식: public Component locate(int x, int y) 매쏘드 설명: 지정된 x,y 위치에 Component를 위치시킵니다. 본문의 내용은 필자들의 동의 없이 reposting 되거나 수정 혹은 출판될 수 없습니다. 신세대 언어, 자바 전문가를 꿈꾸는 잠탱이 3인방, 신정호, 제갈영, 조국 </FONT>

관련글 더보기