JFC ( Java Foundation Class )
GUI ( Graphical User Interface )
- AWT
- Swing
1. JFC ( Java Foundation Class )
- Window Application을 작성할 때 사용
- AWT ( Abstract Windows Toolkit ) 와 Swing이 제공
- 실행파일( .exe ) 을 만들수 없다.
└> 배포용 jar를 dos창에서 java.exe로 실행시켜야한다.
실행하는 방법 : java -jar 배포된.jar
- Component Programming : 기능을 가진 대상을 미리 구현해놓고 조합하여 사용하는 프로그래밍
└> ex ) 버튼 , 창
- Visual Component 와 Non Visual Component 를 제공
Visual Component |
Window Component : 사용자에게 보여지는 일 ex) Window, Frame, Dialog , FileDialog
Container Component : 사용자에게 보여지지 않는다, 일반 컴포넌트, Container Component를 배치하는 일(배치관리자:Layout Manager) ex) Panel , ScrollPane , CheckboxGroup Component : 기능을 가진 객체들( 사용자가 보고 사용하는 객체들 ) ex) Button, List, Checkbox (+ CheckboxGroup=RadioButton), Label , TextField(한 줄), TextArea(여러줄)
|
Non Visual Component |
배치관리자(LayoutManager) : BorderLayout,FlowLayout, GridLayout , CardLayout , GridBagLayout, Font Color |
2. AWT
- 만들기 쉽다.
- 느리다, 컴포넌트가 미려하지 못하다, 버그가 많다.
- OS 마다 다른 컴포넌트 모양을 보여준다.
- 기능만 알고, 컴포넌트의 모양은 모른다.
window |
_ |
ㅁ |
x | |||||
|
frame |
| ||||||
|
|
|
|
|
|
|
|
|
|
|
button |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
상속관계 |
Window |
|
|
|
|
|
|
|
↑ |
|
|
|
Frame |
|
|
↑ |
|||
Test | |||
작성법)
1. WindowComponent 상속
class Test extneds Frame{
}
2) 생성자에게 사용할 Component 생성
public Test(){
Button btn = new Button("눌러!!!");
Label l = new Label("이름표");
}
3) 생성된 컴포넌트 배치(부착) - Window Component, Container Component
- 배치관리자 사용
add(컴포넌트)
4) 윈도우 크기설정
- setSize(w,h)
5) 사용자에게 보여주기
- setVisible(true)
4. Layout 설정
- 컴포넌트를 배치하기 위해 사용되는 객체들
- 자동배치 와 수동배치 두가지 존재
- 자동배치 : 컴포넌트가 정해진 위치에 들어가는 것
setLayout(배치관리자)
|
|
|
|
|
배치관리자의 종류 |
|
| ||
|
|
North |
|
BorderLayout - 각 영역은 하나의 컴포넌트를 가진다. - 배치되는 컴포넌트는 자신의 고유크기가 무시되고 위치에 딱 맞게 들어간다. | |||||
West |
Center |
East |
| ||||||
| |||||||||
South |
| ||||||||
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
FlowLayout - 추가하는 순서대로 컴포넌트가 배치 된다. - 컴포넌트는 자신의 고유크기를 유지한다. - 윈도우의 크기가 변경되면 컴포넌트위치가 변경된다. | |||
|
1 번째 |
2 번째 |
3 번째 |
|
| ||||
|
|
|
|
|
| ||||
|
4 번째 |
5 번째 |
6 번째 |
|
|
|
|
| |
|
GridLayout - 행과 열로 구성된 Layout - 모든 행의 높이와 넓이는 같다. - 추가하는 순서대로 컴포넌트가 부착된다. - 컴포넌트는 고유크기를 가지지 못한다. - setLayout( new GridLayout(행,열)); - 배치되는 컴포넌트의 수가 정해놓은 수와 맞지 않는다면 원하는 행열로 나오지 않을 수 있다. | ||||||||
1,2,3중 선택되어 보인다. |
CardLayout - 여러개의 패널중 하나의 패널을 보여줄때 사용 - 한정적인 공간에 여러개의 Panel 중 하나를 보여줄 때 사용 | ||||||||
1 | 2 | 3 | |||||||
GridBagLayout - 행과 열로 구성되는 Layout - 행마다 열의 갯수가 다른 Layout | |||||||||
- 수동배치 : 컴포넌트를 원하는 위치에 배치하는것
5. Menu 의구성
- MenuBar : Menu를 저장하고 Frame에 설정되는 일
- Menu : MenuItem을 가지면서 MenuBar의 배치
- MenuItem : 사용자가 사용하는 기능을 구현
사용법)
1)MenuBar 생성
MenuBar mb = new MenuBar();
2)Menu 생성
Menu m = new Menu("Labe(파일/편집/보기/기타등등.."));
3)MenuItem 생성
MenuItem mi = new MenuItem("Label(열기/저장/종료/기타등등..."));
4)메뉴아이템 배치
m.add(mi);// 메뉴 아이템을 메뉴에 배치
5)메뉴를 메뉴바에 배치
mb.(m);//메뉴를 메뉴 바에 배치
6)메뉴바를 Frame설정
setMenuBar(mb);
6.수동배치
- 개발자가 컴포넌트의 위치를 원하는대로 좌표를 설정하여 배치하는 것
- 좌표설정하여 배치하는 것
- 배치관리자를 해제해야한다.
└setLayout(null);
- 좌표설정(절대좌표) , 좌측상단모서리가 시작점이다 좌표 ( x=0 ,y= 0 )
setLayout(x,y);
- 컴포넌트의 크기설정
setSize(width, height);
- 배치
add(component명);
setLayout(null);
Button btn = new Button("버튼")
btn.setLocation(30,60);
btn.setSize(80,20); //setBounds를사용하면 Location과 size를 같이 설정할수있다. =>setBounds(30,60,80,20);//setBounds(x,y,width,height);
add(btn);
7. Event Handling ( 이벤트 처리 )
- 사용자의 동작이 있을 때 그 동작에 따른 코드를 실행하는 것
- java.awt.event 패키지에서 관련 클래스를 제공한다.
- 스윙에서도 호환이된다.
동작 |
이벤트 객체 |
감지 |
이벤트를 등록(method) |
컴포넌트 |
클릭 Eneter Key |
ActionEvent |
ActionListener |
addActionListener( 처리 할곳 )
|
Button , List , Choice , MenuItem TextField |
키보드 키가 눌릴 때 |
KeyEvent |
KeyListener |
addKeyListener( 처리 할 곳 ) |
TexfField, TextArea |
아이템이 선택 될 때 |
ItemEvent |
ItemListener |
addItemListener ( 처리 할 곳 ) |
List, Choice, Checkbox |
윈도우 Event |
WindowEvent |
WindowListener | addWindowListener ( 처리 할 곳 ) |
Window , Frame , Dialog |
마우스 Event |
MouseEvent | MouseListener | addMouseListener ( 처리할 곳 ) | 모든 Component |
이벤트 처리방법)
1.1) 이벤트를 감지하고 처리할 클래스를 생성;
java.awt.event 패키지의 ~listener를 구현해야한다.
class Test implements ActionListener, ItemListener{
}
1.2) 인터페이스내에 추상메소드를 Override
public void actionPerformed( ActionEvent e ){
사용자에게 이벤트가 발생했을 때 사용자에게 제공할 코드
}
2) 디자인클래스에서 컴포넌트를 생성하고 이벤트를 종료
Test t = new Test();
Button btn = new Button("버튼");
이벤트 등록
btn.addActionListener( t );
(등록이 되면 사용자가 클릭했을때 처리할 클래스 호출
8. Adapter 클래스
- 이벤트처리용 Listener 가 추상method로 하나이상 가지고 있다면 그 추상 method를 사용의 편의성을 위해서
미리 override 한 클래스
9. Swing
- AWT의 차후 버전
- AWT의 문제 해소 ( 느리다 , 무겁다 , OS마다 컴포넌트의 모양이 다르다,버그가 많다. )
- AWT의 Component,Event 가 같이 사용될 수 있다.
- AWT의 Component와 구분하기위해서 Component앞에 ' J ' 가 붙어 있다.
Button -> JButton
List -> JList
- 이미지를 다루기가 편하다. ( ImageIcon )
- 장점 : 미려한 컴포넌트, JVM이 Component의 모양을 알고 있다.
- MVC pattern 으로 생성된 Component가 제공