Layout Manager (배치관리자) 

- 일반 컴포넌트를 Container Component나 Window Component에 배치하기 위해 제공하는 Class

- Container Component와 Window Component에서 적용할 수 있음

- 자동배치 관리자와 수동배치 관리자 두 가지를 사용할 수 있음

- setLayout method로 배치관리자를 적용함

 

자동배치 관리자

- 컴포넌트가 배치되는 크기와 위치가 결정되어 있는 관리자

- BorderLayout, FlowLayout, GridLayout, GridBagLayout, CardLayout 라는 Class 들이 제공됨

  (java.awt package)

- Non Visual Component : 사용자에게 컴포넌트 자체가 보이지 않음

 

1) BorderLayout (경계 레이아웃)
- Window Component (Window, Frame)의 기본 레이아웃
- 하나의 영역에 하나의 컴포넌트만 배치됨 (Center, 동서남북)
- 컴포넌트의 고유 크기가 무시되고, 배치되는 위치에 맞게 수정됨
   > Window의 크기를 변경하면 컴포넌트의 크기가 동일하게 늘어나거나 줄어듦
설정) setLayout (new BorderLayout() ); // 생략가능
컴포넌트 배치 문법) add(“배치할 위치”, 컴포넌트);
                            add(컴포넌트, 배치할 위치 상수);
 // 배치 위치를 설정하지 않으면 center에 들어감
  

2) FlowLayout (흐름 레이아웃)
- Container Component(Panel, ScrollPane)의 기본 레이아웃
- 윈도우의 크기가 줄어들면 컴포넌트의 위치가 위->아래로 변화됨(늘어나면 반대)
- 배치되는 컴포넌트의 크기는 고유크기를 가지고 배치됨
설정) setLayout(new FlowLayout());
- 컴포넌트 배치 문법) add(컴포넌트);
 // add하는 순서대로 배치

3) GridLayout (격자 레이아웃)
행과 열로 구분된 레이아웃
- 모든 행의 컴포넌트의 크기가 동일하게 설정되는 레이아웃
- 하나의 영역에는 하나의 컴포넌트가 배치됨
- 배치되는 컴포넌트의 크기는 고유크기가 무시되고 영역에 맞게 확장됨
설정) setLayout(new GridLayout(행,열));
컴포넌트 배치 문법) add(컴포넌트); // add하는 순서대로 왼->오른쪽으로 배치

4) GridBagLayout
- 행과 열로 구성된 레이아웃
- 행마다 열의 개수와 높이가 다름

 

5) CardLayout
- Container Component (Panel)에만 적용되는 레이아웃 (Window에서 적용 불가)
- 여러 개의 Panel중 사용자에게 하나의 Panel만 제공하는 레이아웃
- 한정적인 공간에 다양한 레이아웃을 보여줄 때 사용


# 오늘의 코딩 #

 

- Layout을 활용해서 휴대폰 전화 키패드를 찍어보자!
** java.awt.Font Class 를 활용하면 font 변경 가능! (style 및 size 포함) **

package test;

import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * GridLayout Class 활용
 * @author user
 */
// Window Component 상속
@SuppressWarnings("serial")
public class UseGridLayout extends JFrame {

	public UseGridLayout() {
		super("연습");

		// 컴포넌트 생성
		String[] data = "1,2,3,4,5,6,7,8,9,*,0,#".split(",");
		JButton[] jbtArr = new JButton[data.length];
		// 배치관리자 변경
		setLayout(new GridLayout(4, 3));
		//font 설정
		Font font = new Font("맑은 고딕",Font.BOLD,30);

		//버튼 배열에 숫자와 특수기호를 배치 및 폰트 적용하는 for문
		for (int i = 0; i < data.length; i++) {
			
			jbtArr[i] = new JButton(data[i]);

			add(jbtArr[i]);
			
			jbtArr[i].setFont(font);

		} // end for

		// 윈도우 크기 설정
		setSize(500, 400);
		// 가시화
		setVisible(true);
		// 윈도우 종료 이벤트 처리
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}// UseGridLayout

	public static void main(String[] args) {
		new UseGridLayout();
	}// main
}// class

- 배열을 사용하면 노가다를 안 해도 된다 ㅎㅎ

 

# 출력 결과 #

 

'Development > Java' 카테고리의 다른 글

[Java] Menu / Event Handling  (0) 2021.08.19
[Java] MVC Pattern  (0) 2021.08.18
[Java] JFC / Swing / Component  (0) 2021.08.15
[Java] Stack / autoboxing / unboxing  (0) 2021.08.12
[Java] JCF - Set, Map  (0) 2021.08.11

 1. JFC (Java Foundation Class) 

- Window용 Application(eclipse, 알집, 알약, 카톡,,,,,)을 작성할 때 사용 (디자인용)

- AWT (Abstract Window Toolkit)와Swing을 제공함

- java만 가지고는 “.exe (Windows용 실행파일)”인 파일을 제작할 수 없음

- 설치되더라도 JDK는 별도로 존재해야 함(프로그램을 여러 개 설치해야 함)

 

 2. JFC – Swing 

- AWT 차후 버전

- 장점 : 가벼운 컴포넌트(빠르다)

          에러가 적다

          OS가 달라도 동일한 모양의 Component를 제공

          이미지 다루기가 쉬움

- javax.swing package에서 Component를 제공함 (JComponenet Class와 그 상속 클래스들)

   > swing은 component 기능을 나타내는 class 앞에 J가 붙어있음

- Swing은 AWT와 호환 가능함

- event 처리에 사용되는 interface와 class는 java.awt.event 패키지에 존재하는 것을 같이 사용함

 

작성법)

1) Window Component(JFrame)를 상속 (is a 관계)

2) 일반 컴포넌트를 생성 (사용자가 사용할 기능 제공)
           : JButton jbtn = new JButton(“버튼”); 

3) 일반 컴포넌트를 배치 (기능을 잘 사용할 수 있도록 적절한 위치에 놓음 – UI설계)

: add(2)에서 생성한 컴포넌트명) // Container 클래스에 존재 => 코드의 재사용성

4) window의 크기(보여줄 크기)를 설정

: setSize(int width, int height) // Window 클래스 => 코드의 재사용성

5) 사용자에게 보여주는 기능을 가진 method 호출 (가시화)

: setVisible(true) // Window 클래스 => 코드의 재사용성

 

** 닫기 버튼만 클릭하면 instance가 사라지지 않으므로 하기 method 추가 필요
=> 윈도우 종료 이벤트 처리
=> instance 삭제 : setDefaultCloseOperatinon(JFrame.EXIT_ON_CLOSE)

 

3. Component 

- 최소의 기능을 가진 단위

- Component Programming : 기능을 가진 최소의 디자인 단위를 사용하여 프로그램을 제작하는 것

 

- Component 종류 :

  • Visual Component : 눈에 보이는 Component
  • Non-Visual Component : 눈에 보이지 않는 Component

- Visual Component 기능상의 분류 :

  • Window Component : 사용자에게 보여주는 일
    - Container Component 또는 Component를 가지고 사용자에게 보여주는 일을 하는 Component
    - Window, Frame, Dialog, FileDialog
  • Container Component : 배치하는 일
    - Container Component 또는 일반 Component를 배치하는 일
    - Panel, ScrollPane
  • Component : 기능
    - Button, Lable, TextField, TextArea, CheckBox, RadioButton, Choice(ComboBox), Menu, MenuItem, MenuBar

'Development > Java' 카테고리의 다른 글

[Java] MVC Pattern  (0) 2021.08.18
[Java] Layout Manager (배치관리자)  (0) 2021.08.17
[Java] Stack / autoboxing / unboxing  (0) 2021.08.12
[Java] JCF - Set, Map  (0) 2021.08.11
[Java] JCF - List / Generic  (0) 2021.08.10

+ Recent posts