Steady Blog

12. GUI Programming(AWT) 본문

Programing/Java

12. GUI Programming(AWT)

우유먹고쑥 2012. 8. 23. 12:09

 

 

 

* GUI Programming(AWT) *

 

1. AWT의 기본 개념

  •  AWT(Abstract Windoew Tool(kit))는 GUI 프로그래밍을 제작하기 위해 자바에서 제공하는 라이브 러리를 모아놓은 것이다.
  • AWT는 모든 GUI 프로그램에 사용되는 컴포넌트 및 툴킷을 제공하고 있으며 향후에는 JFC와 같은 스윙(Swing) 및 Java 2D의 모태가 되는 개념이다.
  • AWT는 운영체제에 구해받지 않고 쓸 수 있도록 운영체제의 것을 그대로 사용하지 않고 공통적이고 기본적인 컴포넌트들을 추상화시켜 제공한다.
  • 실행되는 운영체제에 따라 다르게 보이거나 동작 방식에 차이가 있을 수 있다.
  • 이러한 단점을 극복하기 위해 개발된 것이 JFC(Java Foundation Classes)이다.

2. java.awf package 구조

 

3. Container

  • 자신의 영역에 컴포넌트를 포함시키고 관리하는 역할을 하며 컨테이너가 다른 컨테이너를 포함 할 수도 있다.
  • 컴포넌트도 또한 컨테이너에 부착시키지 않으면 독자적으로 화면에 출력될 수가 없고 반드시 컨테이너에 부착을 시켜야만 화면에 출력이 될 수 있다.
  • 컨테이너의 종류에는 Frame, Window, panel, Applet, Dialog, FileDialog, Scrollpane이 있다.
  • 컨테이너에 컴포넌트를 부착시키기 위해 add()메소드를 사용한다.

 

4. AWP 작성방법

  • 1단계 : import java.awt.*;
  • 2단계 : extends Frame or Frame 객체 생성
  • 3단계 : Frame 크기 설정 - setSize(int width, int heigth) or pack()
  • 4단계 : Frame 표시 -  setVisivble(boolean visible)

5. Frame Class

  • Window 클래스의 하위 클래스로 일반적인 응용프로그램에서 윈도우를 생성하기 위해 사용되는 클래스이다.
  • Frame 클래스의 상위 클래스인 Window 클래스는 타이틀, 메뉴 등이 지원되지 않기 때문에 일반적으로 사용하지 않고 Frame 클래스를 사용한다.
  • Frame 클래스는 기본적으로 경계선(Border), 타이틀, apsb, 시스템상자(최소화, 최대화, 종료 버튼)등의 기능을 제공한다.
  • Frame은 다른 윈도우에 속해 있지 않은 윈도우로 치상위 레벨 윈도우라 한다.
  • setSize(),. setBounds() 메소드 등을 이용해서 Window의 크기를 설정한 후 setVisible(), show() 메소드를 통해서 화면에 출력시킬 수 있다.
  • Frame의 생성자

 

  • Frame 메소드

  • Frame 생성방법 첫 번째 (객체 발생)


import java.awt.*;
public class FrameEx1{
 public static void main(String[] ar){
  Frame frame = new Frame();
  frame.setSize(300,200);
  frame.setVisible(true);
 }
}

<결과 화면>

  •  Frame 의 생성방법 두 번째 (상속)


import java.awt.*;
public class FrameEx2 extends Frame{
 FrameEx2(){
  super("Frame Ex");
  setSize(300,200);
  setVisible(true);
 }
 public static void main(String[] ar){
  new FrameEx2();
 }
}

<결과 화면>

 

6. LayoutManager (배치 관리자.)

  • 컨테이너는 자기 자신에 컴포넌트를 붙일 때 어디에, 어떤방식으로 배치하여 븉알 것인가를 이미 결정하고 있다. 즉, 미리 정해진 레이아웃에 따라 컴포넌트들을 자동으로 배치하는 기능을 가지고 있는 객체를, 컨테이너들은 가지고 있는데 이것을 배치관리자(LayoutManager)라 한다.
  • 자바에서 사용하는 배치 관리자는 NullLayout, FlowLayout, BorderLayout, GridLayout, GridBagLayout, CardLayout의 6가지가 있다.
  • 배치 관리자는 각자 다른 방식으로 배치기능을 가지고 있으며 컨테이너는 기본적으로 하나의 배치관리자를 가지고 있다.
  • 사용자가 임의로 배치관리자는 다시 설정할 수 있으며 배치관리자를 제거하고 수동으로 좌표를 이용해서 배치할 수도있다.

    1) Null Layout 

  • 기능 : Layout 관리자를 없앤 것 이므로 null Layout 이라고 부름

  • 설정 방법 : component의 크기와 위치를 프로그래머가 좌표로 구현한다.

  • 설정방법 : container.setLayout(null);

  • 특성 : Contrainer 의 크기를 변경 시 자동으로 위치가 변동

     2) BorderLayout

  • 기능 : Container 영역을 동,서,남,북 그리고 중앙으로 분할
  • 설정방법 : container.setLayout( new BorderLayout());
  • component 의 위취와 크기 설정 

                 container.add("위치 key", component);

                위치 key = "East","West","South","North","Center"

  • 특성 : frame의 크기가 변하면, Layout관리자가 각 component를 Container의 size에 따라 조정 East,West,South,North가 설정되고, 나머지 영역이 Center영역이 된다.

 

 

     3) FlowLayout

  • 기능 : 설정되는 component의 등록순서대로, 각 component의 최소크기 대로 순서대로 배치됨

  • 설정방법 :  container.setLayout( new FlowLayout());

  • component의 최소크기는 각 component의 표시내용을 보여줄 수 있는 최소크기로 설정됨

  • 특성 : container의 크기를 변경 시 자동으로 위치가 변동됨

     4) GridLayout

  • 기능 : component가 동일한 크기의 행,렬로 grid를 형성하고, 각 grid에 하나씩의 component를 할당

  • 설정방법 :  Container.setLayout(new java.awt.GridLayout(r,c)); // r = row,c = column

  • 특성 : Container가 아무리 작아도 각 component의 일부는 보인다.

     5) GridBagLayout

  • 여러 개의 카드를 쌓아둔 것 처럼 컴포넌트를 하나만 보여주는 배치 관리자이다.

  • 맨 위의 컴포넌트만 보여주므로 한번에 하나의 컴포넌트만 볼 수 있다.

  • CardLayout에는 맨 위에 위치할 컴포넌트를 지정할 수 있는 메소드가 지원되며, 또한 그 다음에 나올 컴포넌트를 이동시킬 수 있는 메소드를 지원한다. 

     6) Layout 혼합(Panel)

  • 기능 : nullLayout, BorderLayout,GridLayout,FlowLayout  등을 혼합해서 다양한 디자인을 한다.

  • 설정 방법 : container인 Panel을 이용 / Panel에 여러 개의 component를 등록하고, 이 패널을 container의 Layout에 등록

  • 특성

    1. Panel은 component를 등록할 수 있는 contaner이다.

    2. Panel에도 모든 Layout관리자를 등록할 수 있다.

    3. Panel은 default Layout이 Flowlayout이다.

    4. Panel은 여러 개를 등록할 수 있다.

     7) 컨테이너의 기본 배치 관리자

 

 

 컨테이너

기본 배치 관리자 

 Frame

BorderLayout 

 Panel

 FlowLayout

 Dialog

 BorderLayout

 

 

7. Component 

  • 모든 컴포넌트들의 super 클래스로서 GUI프로그램을 구성하는 구성단위로 각 컴포넌트들에서 공ㅌㅇ으로 사용되어지는 메소드들을 가지고 있다.

    1) Component Class의 크기 및 위치 관련 메소드

 

 반환형

 메서드

설명 
 int  getX()

 컴포넌트의 현재의 X좌표를 얻어온다.

 getY()

 컴포넌트의 현재의 Y좌표를 얻어온다.

 getWidth()

컴포넌트의 현재의 폭을 얻어온다. 

 getHeight()

컴포넌트의 현재의 높이를 얻어온다. 

Dimension

 getSize()

컴포넌트의 크기를 크기객체로 얻어온다 

getMaximunSize() 

컴포넌트의 최대 크기를 크기 객체로 얻어온다. 

 getMinimumSize()

 컴포넌트의 최소 크기를 크기객체로 얻어온다.
 Rectangle

 getBounds()

 컴포넌트의 경계를 직사각형 객체로 얻어온다.

 void

 setSize(int width, int height)

 컴포넌트의 폭, 높이를 지정한다.
 setLocation(int x, int y) 컴포넌트의 새로운 위치를 지정하여 이동시킨다. 

 setBounds(int x, int y, int width, int height)

컴포넌트의 위치와 크기를 지정한다. 

 setBounds(Rectangle r)

새로운 경제 Rectangle r에 적합하도록 컴포넌트의 위치와 크기를 지정한다. 

 

    2) Component Class의 색상 및 폰트 관련

 

 

 

   3) Component Class의 설정 관련 메소드

 

 

 

 

 

8. Label Class

  • 사각형의 영역에 문자열을 표시할 때 사용하는 컴포넌트이다.

  • 레이블은 경계선이 없고 특별한 상태를 가지지도 않는다. 그러므로 레이블을 컨테이너에 포함시키게 되면 레이블의 문자만 화면에 표시가 된다.

  • 레이블의 문자열은 좌, 우, 중앙으로 정렬시킬 수 있다.

  • 생상자

     

  • 주요 메소드


 import java.awt.*;
public class LabelEx extends Frame{
     Label la1; Label la2; Label la3; Label la4;
     Font f1; Font f2;
     LabelEx(){
      super("Label Exam");
      f1 = new Font("굴림체",Font.BOLD,20);
      f2 = new Font("바탕체", Font.ITALIC,25);
      la1 = new Label("안녕하세요.");
      la2 = new Label("관리자입니다..",Label.CENTER);
      la3 = new Label("Student이지요",Label.RIGHT);
      la4 = new Label("방가방가!!");
      setLayout(new GridLayout(4,1));
      la1.setFont(f1); la2.setFont(f1);
      la3.setFont(f2); la4.setFont(f2);
      add(la1); add(la2); add(la3); add(la4);
      la1.setBackground(Color.red);
      la2.setBackground(Color.blue);
      la3.setBackground(Color.green);
      la4.setBackground(Color.pink);
      setSize(300,200);
      setVisible(true);
  

 }
     public static void main(String[] ar){
      LabelEx is = new LabelEx();
     }
}

 

<결과 화면>

 

 

 


 

9. Button Class

  • 버튼을 사용자가 눌렀을 때 특정한 액션을 실행할 수 있도록 만든 컴포넌트이다.

  • 생성자

 

  • 주요 메소드

 


 import java.awt.*;
public class ButtonEx extends Frame{
 private String[] str = {"7","8","9","4","5","6","1","2","3","#","0","*"};
 private Button[] bt = new Button[str.length];
 public ButtonEx(){
  super("Button Example");
  setLayout(new GridLayout(4,3,5,5));
  for(int i = 0; i<bt.length;i++){
   bt[i] = new Button(str[i]);
   bt[i].setFont(new Font("굴림체",Font.BOLD,30));
   add(bt[i]);
  }
  setSize(300,200);
  setVisible(true);
 }
 public static void main(String[] ar){
  ButtonEx be = new ButtonEx();
 } 
}

 

<결과 화면>

 

 


10. TextComponent : TextField, TextArea

  • 텍스트를 다루는 클래스의 super 클래스로 텍스트를 처리하는 각종 메소드를 가지고 있다. 단! 돈립적으로 생성되지는 못한다.

  • 텍스트 편집과 관련된 주요 메소드

  • 텍스트 선택과 관련된 주요 메소드

1) TextField

  • 한 줄 내의 텍스트를 입력 받거나 편집할 수 있는 컴포넌트이다.

  • 한 줄에 표시할 수 있는 컬럼수를 지정할 수 있고 반향문자를 지정하면 입력되는 문자대신 반향 문자로 지정한 문자로 출력된다.

  • 생성자

  • 주요 메소드

     

   2) TextArea

  • 여러 줄의 텍스트를 사용자로부터 입력받거나 편집할수 있는 컴포넌트이다.

  • 화면에 출력되는 영역이 벗어나면 스크롤바 표시 방식에 따라 자동적으로 스크롤 바가 생성 된다.

  • 사용자가 필요에 따라 일부 스크롤바만 나타나게 할 수도 있다.

  • 생성자

  • 주요 메서드


 import java.awt.*;
public class TextEx extends Frame{
 private TextField tf = new TextField("제목 : ");
 private TextArea ta = new TextArea("메모",5,10);
 private Button bt = new Button("확인");
 private Label la = new Label("내용");
 public TextEx(){
  super("TextExField");
  setLayout(new BorderLayout());
  add("North",tf);
  add("South",bt);
  add("Center",ta);
  add("West",la);
  setSize(300,200);
  setVisible(true);
 }
 public static void main(String[] ar){
  TextEx te = new TextEx();
 }
}

<결과 화면>

 

 


 

11. List Class

  • 여러 개의 항목을 보여주고 사용자가 하나 또는 여러 개의 항목을 선택할 수 있도록 지원하는 컴포넌트이다.

  • 기본적으로는 하나의 항목만을 선택할 수 있지만 MultipleMode를 설정하면 한번에 여러 개의 항목을 선택할 수있다.

  • 주요 생성자

  • 주요 메소드

 

'Programing > Java' 카테고리의 다른 글

14. java IO - File  (0) 2012.08.27
12.Event  (0) 2012.08.23
11.Generic & Collection - 정리필요  (0) 2012.08.23
10. 패키지, 예외처리, 단언 - 정리 필요  (0) 2012.08.23
9. 이너클래스와 열거형 - 정리 필요  (0) 2012.08.23