카테고리 없음

[JAVA] JFC : GUI

이든Kim 2018. 4. 11. 19:53

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가 제공