Web/MSA Full-Stack 과정

Kosta Day18 : GUI (JAVA)

ERE 2022. 2. 15. 18:31

GUI(화면구성)
 1) awt : 그래픽이 운영체제에 있는 그래픽을 가져와서 사용하기 때문에 운영체제 영향을 받음.
            운영체체에 따라 느낌이 다르다.
            import java.awt.*;

            ex) Frame ,Panel, Button, TextField, .....


 2)swing : 자체적으로 Look and Feel을 가지고 있어서 내가 선택하는 그랙픽을 기반으로 GUI구성된다.
              운영체체마다 동일한 느낌으로 화면구성이된다.
              import javax.swing.*;

            ex) JFrame ,JPanel, JButton, JTextField, .....

      
    *용어정리
   - Container  : 창의 역할(반드시 한개이상의 Container가 필요하다)
                ex) JFrame-메인창, JPanel - 서브창 , JDialog - 팝업창......
                    : Component들이 올려질 영역

               JFrame위에 Component를 추가 :  ~.add(Component con)

  - Component : Container위에 올려져서 화면구성을 담당하게될 요소들....
                ex) JButton, JTextField, JTextArea, JComboBox ,........

  -LayoutManager : Container위에 component들이 올려질때 배치방법
                ex) BorderLayout - JFrame, JDialog
                     FlowLayout - JPanel
                     GridLayout
                     CardLayout
                     GridBackLayout

 --------------------------------------------------------------
  * Event처리
   : import java.awt.event.*;
   : 사용자의 어떤 액션(행동)이 일어났을때 처리해야하는 기능!!!!
   : 자바에서 액션에 해당하는 즉 사용자의 액션이 일어나면 호출되어지는 메소드들이 이미 정의되어 있다.(EventHandler)
      - 추상화(interface)로 만들어져 있고 필요한 사람이 재정의(구체화) 시켜서 사용한다.

      Event 관련 interface => XxxListener 있다.
              단점) 모든메소드를 재정의 해야한다.!!(필요한 메소드는 단 한개라 하더라도 모두 재정의 필수)


    Event관련된 interface를 미리 implements한 구현객체 들을 제공한다. ==> XxxAdapter 클래스 제공한다.- 메소드가 2개이상인겨우
             단점) 결국은 상속은 한개밖에 할수없다!!!!
                     XxxAdapter를 사용하고 싶다면 결국 이벤트를 처리하는 클래스는 각각 만들어야한다.!!! 


   *이벤트를 처리하는 방법
       ex) btn1 버튼을 클릭하면 "안녕" 이라고 출력하고 싶다.!!
    1) 이벤트를 발생시키는 주체(Component)를 찾는다.
          : JButton - > btn1

    2) 1)에 찾은 주체가 발생할수 있는 이벤트종류를 찾는다. - XxxEvent
         : ActionEvent

    3) 2)에서 찾은 XxxEvent에 해당하는 XxxListener 또는 XxxAdapter를 선택하여 메소드를 재정의한다. - 코딩시작!!!!
         : 원하는 기능을 만든다( "안녕" 출력한다)

   4) 이벤트 등록
         이벤트발생주체.addXxxxListener( ???? ); -> 인수로 전달되는 값은  3)을 만들어놓은 주체를 뜻함.
            : ??? 자리에 들어갈수 있는 값은 3가지 형태
                 1) this
                 2) 외부객체생성한 변수
                 3) Annoymous inner 클래스 
           

=======================================================
  - Inner Class 형태

   class A{
      int a=10;

       class B{ //클래스의 역할 할수 있어서 상속, 구현 모두 가능하다~~
            //이너 클래스안에서는 outer클래스의 모든 메소드, 모든 필드를 접근할수 있다!!!!!
            //단점은 inner클래스는 Outer클래스 내부에 존재하기 때문에 Outer클래스 없이는 사용할수 없다.
           // B 클래스를 독립적으로 사용할수 없다. A클래스의 속성과 같은 것.
      }  

    

  }

 -컴파일을하면 클래스 생성
  A.class
  A$B.class  -> outer클래스이름$inner클래스이름.class


  * Inner클래스는 선언위치와 선언 방법 에 따라 3가지 형태가 존재한다.
     1) 인스턴스 맴버클래스
           class A{
                class B{ }
           }
     2) 정적(static) 맴버클래스 
           class A{
               static class B{ }
            }

     3) 로컬(메소드 내부에서 선언된) 클래스
             class A{
                   public void aa(){
                          class B{  }
                   }
             }