[Java] 2020.11.18. day_21 AWT,Swing,WindowListener,WindowAdapter, Layout Manager

2020. 11. 18. 17:37Web_Back-end/Java SE

◎ AWT _ Window Component 종료이벤트처리

  AWT _ Window Component 종료이벤트처리
Window Component Frame
사용법
addWindowListener
method
1. addWindowListener method 호출
addWindowListener ( WindowListener l );
WindowListener : interface => 객체화 X , 자식(구현클래스)이 구현해야할 추상method만 가짐

method의 매개변수가 interface일 때

1-1 interface를 구현한 class를 만들고, 객체화하여 객체를 넣는다
addWindowListener(this);

1-2 anonymous inner class를 만든다↓↓↓
addWindowListener( new WindowListener(){

  추상 method Override ( WindowListener : 7개 )
  //이름없는 클래스 : 부모는 바로 앞에 정의된 class 나 interface가 된다

} );

1-3 anonymous inner class 에서 매개변수를 WindowAdapter로 넣는다
//WindowListener interface를 미리 구현한 클래스인 WindowAdapter를 제공
//WindowAdapter 클래스는 WindowListener의 7개 추상method를 일반 method로 
//구현했기 때문에 WindowAdater의 필요한 method만 구현(Override)한다
ddWindowListener( new WindowAdapter(){

  추상 method Override ( 7개모두 하지않고, 필요한 method만 구현 )
  //이름없는 클래스 : 부모는 바로 앞에 정의된 class 나 interface가 된다

} );
anonymous inner class

AWT Swing
AWT, Swing : 호환가능
  Swing은 AWT와 호환가능
java.awt  javax.swing //x : extenstion(확장) : 추가된 패키지
추가된 패키지 : 기존기능을 갱신, 갱신할 필요없는 기능은 기존의 기능을 사용한다(호환) 
기능만 저장, 디자인은 OS에서 사용 기능과 디자인을 JVM이 모두 저장
속도↓ , Error↑ 속도↑, Error↓
OS마다 다르게 보여진다 OS마다 동일하게 보여진다

◎ Swing 코딩순서_AWT와 거의 같다

  코딩순서 Swing
1 Window Component 상속  // Window Component : JFrame : 종료가 된다
public class Test extends JFrame{


2 생성자 작성   public Test (){
    super("타이틀바에 들어갈 내용");
3 일반 Component 생성   JButton (Button도 가능_호환가능)
  Button button = new Button("버튼이다");
  JButton jbutton = new JButton("J버튼이다");
4 배치 (3번에서 생성된 Component를 붙이는 것)   add(Component);
//add : 부모_윈도우 컴포넌트or컨테이너 컴포넌트, Component :일반컴포넌트
//일반컴포넌트가 윈도우or컨테이너 컴포넌트에 배치
  배치관리자(Layout Manager)를 사용하여 컴포넌트를 배치
  setLayout(new GridLayout(rows, cols)); //행,열
  add(button);
  add(jbutton);
5 윈도우컴포넌트의 크기설정   setSize( w, h );
6 윈도우를 사용자에게 보여주기   setVisible( true );
7 윈도우컴포넌트 종료처리   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  instance화   public static void main(String[] args){
    new Test();
  }
}

○ 배치관리자(Layout Manager)

  배치관리자(Layout Manager)
awt package에서 사용
Container Component, Component를 지정된 위치에 편하게 배치하기 위해서 사용
Nom Visual Component : 사용자에게 보여지지 않는다
Window Component(Frame,JFrame,JDialog,,),
Container Component(JPanel, JScrollPane)에 적용하여 사용
일반 Component는 배치관리자를 가질 수 없다
종류
BorderLayout
(경계 레이아웃)
Window Component의 기본 Layout
하나의 지역(ex:West)에는 하나의 Component만 배치된다
배치되는 Component는 고유크기가 무시되고, 배치되는 곳의 크기에 맞게 변경된다
배치되는 위치를 지정해야한다 (지정x->center로 배치)

사용법)
1 레이아웃 설정
setLayout( new BorderLayout() );
2 배치
add("지역", Component);
JButton button = new JButton("north 버튼");
add("North",button); //문자열 상수를 사용해서 배치
add( BorderLayout.East ,button); //BorderLayout 의 상수를 사용해서 배치

FlowLayout
(흐름 레이아웃)
Container Component의 기본 Layout
배치되는 컴포넌트는 고유크기대로 배치된다
배치는 왼→오 순서로 배치된다
윈도우의 크기가 줄거나 늘어나면 컴포넌트의 위치가 위에서 아래로 이동한다

사용법)
1 배치관리자 생성
FlowLayout fl = new FlowLayout();
2 레이아웃 설정 (배치관리자 적용)
setLayout( fl );
1+2 setLayout( new FlowLayout() ); //fl객체를 사용할 일이 없기 때문에 new로 생성
3 컴포넌트 배치
button1 = new Button("Ok");
button2 = new Button("Open");
button3 = new Button("Close");
add(button1);
add(button2);
add(button3);

GridLayout
(격자 레이아웃)
로 구성된 레이아웃
컴포넌트의 크기가 동일하게 배치되는 레이아웃
컴포넌트는배치하는 순서대로 왼→오 순서로 배치된다

사용법)
1 레이아웃 관리자 생성
GridLayout gl = new GridLayout(행, 열); //행-row, 열-column
2 배치관리자 적용
setLayout( gl );
1+2 setLayout( new GridLayou(row, col) );
3 컴포넌트 배치
add( button1 );
add( button2 );

CardLayout
잘 안씀
Container Component 에만 적용할 수 있는 레이아웃
한정적인 공간에 다른 디자인을 제공할 때 사용 (tab 역할)
여러개의 Container Component를 만들어두고 그 중 하나의 Container Component를 보여줌
GridBagLayout
잘 안씀
행마다 열의 크기, 갯수를 다르게 보여줄 때 사용
수동배치를 사용하면 GridBagLayout사용하지 않아도 됨_잘 안쓰는 이유
적용방법
1 배치관리자 생성 BorderLayout b = new BorderLayout();
2 적용 2-1 Window Component //기본레이아웃 : BorderLayout
setLayout( b ); //코드의 재사용성
//부모클래스로 JFrame을 상속받는다
2-2 Container Component //기본레이아웃 : FlowLayout
1. Comtainer Component 생성
JPanel jp = new JPanel();
2. 적용
jp.setLayout( b );