Steady Blog
12. GUI Programming(AWT) 본문
* 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에 등록
-
특성
-
Panel은 component를 등록할 수 있는 contaner이다.
-
Panel에도 모든 Layout관리자를 등록할 수 있다.
-
Panel은 default Layout이 Flowlayout이다.
-
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 |