13일차 수업 ( GUI / Frame / Panel )
1. 자바 GUI ( Graphic User Interface )
가. AWT ( Abstract Window Toolkit )
=> GUI 컴포넌트를 보여줄때 OS자원을 이용해서 보여진다.
따라서 Window와 UNIX에서 보여지는 컴포넌트가 다르다.
=> 성능이 떨어진다.
나. Swing
=> 자신이 가지고 있는 자원을 이용해서 컴퓨넌트를 보여준다.
따라서 OS와 상관없이 항상 동일한 화면으로 보여진다.
=> 성능이 좋다.
2. 레이아웃 매니저
- 컴포넌트들의 위치와 크기를 관리하는 클래스
=> 종류
- BorderLayout : Frame이 기본적으로 사용하는 레이아웃
* 5가지 영역 존재
(Center, North, South, West, East)
각 영역마다 한개의 컴퓨턴트가 올라간다. 여러개 올려도 마지막으로 올라간 컴포넌트만 보여진다.
영역을 지정하지 않으면 Cneter에 올라간다.
* 크기를 resize 하면 위치 변경없고 크기변경됨.
- FlowLayout : Panel이 기본적으로 사용하는 레이아웃
* 왼쪽에서 오른쪽으로, 위에서 아래로 올라간다.
* 크기를 resize하면 크기변경없고 위치변경됨
- GridLayout : 바둑판
- CardLayout
- GridBagLayout
4. 이벤트 처리
가. 이벤트(event)
==> 사용자에 의해서 발생되는 액션을 의미한다.
예> 마우스 클릭, 키보드 입력 등..
==> 이벤트가 발생되면 행위가 발생된다.
이런 행위는 메소드가 처리한다.
이 메소드를 포함하는 클래스가 필요한데 이 클래스를 '이벤트 핸들러' 라고한다.
나. 이벤트 핸들러 ( event handler )
==> 이벤트가 발생되었을 때 실제로 처리작업을 구현한 클래스를 의미
예> 버튼클릭 --> 창닫기
=> 반드시 interFace를 사용해야 된다.
공통적으로 XXXListener 이름으로 되어있다.
예> ActionListener, ItemListener
다. 이벤트 소스 ( event source )
-> 실제로 이벤트가 발생된 컴포넌트를 의미한다.
4. 중첩 클래스
용도 : 클래스구조를 가지고 있지만 ,다른클래스에서 사용하지 않고 특정 클래스에서만 사용하는 경우로 주로 GUI 이벤트 처리시 사용한다.
정의 : 클래스내에 또 다른 클래스가 지정 가능하다. 바깥쪽의 클래스를 Outer 클래스라고 하고,
안쪽의 클래스를 중첩클래스(nested 클래스, inner 클래스)라고 한다.
종류 : 중첩클래스가 Outer클래스의 어떤 위치에 지정되었는가에 따라 4가지로 구성된다.
<기본 예제> Frame일 이용하여 버튼 만들어보기
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
public class FrameTest {
Frame f;
Button btnOK;
Button btnCancel;
Button btnWest;
Button btnEast;
Button btnSouth;
public FrameTest() {
f = new Frame("Frame 실습");
btnOK = new Button("OK");
btnCancel = new Button("Cancel");
btnWest = new Button("West");
btnEast = new Button("East");
btnSouth = new Button("South");
}
public void init() {
f.setLayout(new FlowLayout());
f.add(btnOK, "Center");
f.add(btnCancel, "North");
f.add(btnWest, "West");
f.add(btnEast, "East");
f.add(btnSouth, "South");
f.setSize(200, 200);
f.setVisible(true);
}
public static void main(String[] args) {
FrameTest t = new FrameTest();
t.init();
}
}
====수업 내용======
1. 자바 GUI ( Graphic User Interface )
가. AWT ( Abstract Window Toolkit )
=> GUI 컴포넌트를 보여줄때 OS자원을 이용해서 보여진다.
따라서 Window와 UNIX에서 보여지는 컴포넌트가 다르다.
=> 성능이 떨어진다.
나. Swing
=> 자신이 가지고 있는 자원을 이용해서 컴퓨넌트를 보여준다.
따라서 OS와 상관없이 항상 동일한 화면으로 보여진다.
=> 성능이 좋다.
2. AWT 의 계층구조
Component
Container 일반컴포넌트( Button,Textfield,List,Checkbox,Radio,,)
window Panel
Frame Dialog
- 일반컴포넌트는 반드시 Container에 얹혀서 보여진다.
- Panel도 반드시 Window계열 (Frame)에 얹혀서 보여진다.
- Panel은 복잡한 화면구성시 필요하다.
일반 컴포넌트
------------
Panel / 일반 컴포넌트
----------------------
Frame
3. 레이아웃 매니저
- 컴포넌트들의 위치와 크기를 관리하는 클래스
=> 종류
- BorderLayout : Frame이 기본적으로 사용하는 레이아웃
* 5가지 영역 존재
(Center, North, South, West, East)
각 영역마다 한개의 컴퓨턴트가 올라간다. 여러개 올려도 마지막으로 올라간 컴포넌트만 보여진다.
영역을 지정하지 않으면 Cneter에 올라간다.
* 크기를 resize 하면 위치 변경없고 크기변경됨.
- FlowLayout : Panel이 기본적으로 사용하는 레이아웃
* 왼쪽에서 오른쪽으로, 위에서 아래로 올라간다.
* 크기를 resize하면 크기변경없고 위치변경됨
- GridLayout : 바둑판
- CardLayout
- GridBagLayout
4. 이벤트 처리
* 용어정리
가. 이벤트(event)
==> 사용자에 의해서 발생되는 액션을 의미한다.
예> 마우스 클릭, 키보드 입력 등..
==> 이벤트가 발생되면 행위가 발생된다.
이런 행위는 메소드가 처리한다.
이 메소드를 포함하는 클래스가 필요한데 이 클래스를 '이벤트 핸들러' 라고한다.
나. 이벤트 핸들러 ( event handler )
==> 이벤트가 발생되었을 때 실제로 처리작업을 구현한 클래스를 의미
예> 버튼클릭 --> 창닫기
=> 반드시 interFace를 사용해야 된다.
공통적으로 XXXListener 이름으로 되어있다.
예> ActionListener, ItemListener
다. 이벤트 소스 ( event source )
-> 실제로 이벤트가 발생된 컴포넌트를 의미한다.
예> OK 버튼 Cancel 버튼
Button btnOK = new Button("OK");
Button btnCancel = new Button("Cancel");
OK버튼을 클릭 => btnOK 참조변수가 이벤트 소스가 된다.
=> 이벤트 소스와 이벤트 핸들러 열결시키는 작업이 필요하다.
예> btnOK.addXXXListener(핸들러클래스);
=> 이벤트 소스 식별하는 방법
- e.getActionCommand(); String
- e.getSource() : Object
예>
Button btnOK = new Button("OK");
Button btnCancel = new Button("Cancel");
* 이벤트 처리 아키텍쳐
화면구성 클래스
Button 생성
버튼 클릭
OK버튼 ---------------> 이벤트 핸들러 클래스
( System.out.println() 구현 )
,반드시 XXListener 인터페이스 구현
5. 이벤트 핸들러 클래스 위치에 따른 이벤트 처리 방법 4가지
가. 화면구성클래스, 이벤트핸들러 클래스
예> GUI.java , ButtonHandler.java
public class GUI implemets ActionListener{
}
나. 화면 구성 클래스에서 처리
- 자신이 구현
-
6. 중첩 클래스
용도 : 클래스구조를 가지고 있지만 ,
다른클래스에서 사용하지 않고 특정 클래스에서만 사용하는 경우.
주로 GUI 이벤트 처리시 사용한다.
정의 : 클래스내에 또 다른 클래스가 지정 가능하다.
바깥쪽의 클래스를 Outer 클래스라고 하고,
안쪽의 클래스를 중첩클래스(nested 클래스, inner 클래스)라고 한다.
종류 : 중첩클래스가 Outer클래스의 어떤 위치에 지정되었는가에
따라 4가지로 구성된다.
가.member 중첩 클래스
==> inner 클래스가 Outer 클래스의 맴버(변수,메소드)처럼 지정된 방식.
예 >
public class Outer{
private int num =10;
public int getnum(){ return num; }
class Inner{
int s=20;
public void getInfo(){}
//num 접근가능
}
=> inner를 사용하기 위해서 반드시 outer클래스부터 객체생성해야 된다.
예 > Outer o = new Outer();
Outer.Inner i = o.new Inner();
i.getInfo();
=> outer 클래스의 private 맴버도
나. local 중첩 클래스
==> inner 클래스가 Outer 클래스의 메소드내에 지정된 방식.
예 > class Outer{
int num;
public void getInfo(){
int size = 10; //로컬변수
final int kkk =10;
//로컬 Inner
class inner{
public void getXX(){ }
// size 접근불가
kkk접근 가능( final 만 접근가능 )
}
Inner i = new Inner();
i.getXX();
}
}
==> Outer 메소드내에서 Inner 클래스를 객체생성해야 된다.
Outer 메소드내의 로컬변수 접근 불가.
다. Static 중첩 클래스
==> 중첩클래스가 static 으로 지정된 형태
예 >
class Outer{
int num = 10;
public void getInfo(){ }
//static inner //먼저 생성이되서 위에num을 쓸수 없는것이다.
static class Inner{
}
}
===> Outer클래스의 맴버 접근이 불가능하다.
이유는 생성시점이 다르다.
Inner 클래스는 Outer클래스명으로 접근이 가능하다.
라. 익명 클래스
==> Outer 클래스내의 inner 클래스이지만,
이름이 없는 inner 클래스이다.
==> 인터페이스, 추상클래스 사용시 주로 사용된다.
예 > 추상클래스 사용하는 경우
예 >
일반클래스명 변수명 = new 일반클래스();
추상클래스명 변수명 = new 추상클래스(){
//추상메소드 구현
};
인터페이스명 변수명 = new 인터페이스(){
//추상메소드 구현
};
///////////////////////////////////
* 이클립스 플러그인
==> 이클립스에 기본 프로그램외에 추가적인 기능을
제공하는 방법.
==> 자바GUI 개발시 사용 가능한 플로그인
(windowBuilder)
가.
http://www.eclipse.org/windowbuilder/
나. 다운로드 선택
다. 4.2 link 누르지 말고 오른쪽클릭>속성>주소복사
라. 이클립스에서 help > install New Software 선택
마. Add 버튼 선택후에
Name : 아무거나
location : 복사한 주소
이후에는 Next로 설치.
마지막으로 이클립스 재시작
//////////////////////////////////////
'프로그래밍 > Java' 카테고리의 다른 글
자바 [JAVA] 16일차 수업 ( DataBase install 및 uninstall ) (0) | 2017.08.21 |
---|---|
자바 [JAVA] 14~15차 수업 (2차원 배열 ,Hashmap,StringTokenizer,사용자 정의 예외처리 ) (0) | 2017.08.19 |
자바 [JAVA] 12일차 수업 ( 파일읽기,쓰기, 객체직렬화 ) (0) | 2017.08.19 |
자바 [JAVA] 11일차 수업 ( Java I/O , 표준입출력 ) (0) | 2017.08.19 |
자바 [JAVA]10일차 수업 ( 컬렉션/Hashset/ArrayList/제네릭 ) (0) | 2017.08.19 |