bit가 눈 앞에서 왔다갔다

GUI 기초_컨테이너, 배치 본문

언어!/Java

GUI 기초_컨테이너, 배치

헬린인형 2021. 5. 2. 20:29

1. 컨테이너, 배치(Layout) 개념

컨테이너에 부착되는 컴포넌트들의 위치와 크기는 컨테이너 내부의 배치관리자에 의해 결정된다.

*AWT, Swing의 컨테이너 특징

1. 컨테이너마다 배치관리자가 하나씩 있음. (배치관리자 삭제 가능)

2. 배치관리자는 컨테이너에 컴포넌트가 부착되는 시점에 컴포넌트의 위치와 크기 결정

3. 컨테이너의 크기가 변경되면 배치관리자는 컨테이너 내부의 모든 컴포넌트들의 위치와 크기 재조정

 

2. 배치관리자 특징

import java.awt.*;

배치관리자는 java.awt 패키지에 존재하는 클래스들. (AWT - 컴포넌트 종류의 이름)

*배치관리자 설정

Container 클래스의 setLayout() 메소드 호출

컨텐트팬의 배치관리자도 변경 가능!

 

1) FlowLayout

-컴포넌트 배치: 왼쪽 -> 오른쪽 / 오른쪽에 더 이상 배치할 공간이 없으면 아래로 내려옴.

-컴포넌트 크기: 화면에 출력할 수 있는 적당한 크기

 

2) Border Layout

-컴포넌트 배치: EAST, WEST, SOUTH, NORTH, CENTER

응용프로그램에서 지정한 영역에 컴포넌트 배치, 반드시 하나를 지정 (default - CENTER)

-컴포넌트 크기: 영역의 크기에 맞춰서

//Border Layout 배치관리자의 생성자
BorderLayout();
BorderLayout(int hGap, int vGap);
//hGap - 좌우, vGap - 상하
import java.awt.*;
import javax.swing.*;

public class layout extends JFrame {
	public layout() { //constructor
		setTitle("BorderLayout Practice");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container con = getContentPane();
		con.setLayout(new BorderLayout(5,7));
		con.add(new JButton("east"), BorderLayout.EAST);
		con.add(new JButton("west"), BorderLayout.WEST);
		con.add(new JButton("south"), BorderLayout.SOUTH);
		con.add(new JButton("north"), BorderLayout.NORTH);
		JButton cen = new JButton("Center");	//풀어써서 이렇게도 ㄱㄴ 그냥 연습하려고 해봄
		con.add(cen, BorderLayout.CENTER);
		
		
		setSize(400,200);
		setVisible(true);
		
	}
	
	public static void main(String[] arg) {
		new layout();
	}
}

 

3) GridLayout

-컴포넌트 배치: 응용프로그램에서 설정한 동일한 크기의 2차원 격자 / 왼쪽 -> 오른쪽 , 위 -> 아래

-컴포넌트 크기: 셀 크기와 동일

//GridLayout 배치관리자의 생성자
GridLayout();
GridLayout(int row, int col);
GridLayout(int row, int col, int hGap, int vGap);
import java.awt.*;
import javax.swing.*;

public class layout extends JFrame {
	public layout() { //생성자
		setTitle("Ten Color Buttons Frame");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		Container con = getContentPane();
		con.setLayout(new GridLayout(1,10));
		con.add(new JButton("1"));
		con.add(new JButton("2"));
		con.add(new JButton("3"));
		con.add(new JButton("4"));
		con.add(new JButton("5"));
		con.add(new JButton("6"));
		con.add(new JButton("7"));
		con.add(new JButton("8"));
		con.add(new JButton("9"));
		con.add(new JButton("10"));
		
		setSize(500,400);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new layout();
	}
}

 

4) CardLayout

-컴포넌트 배치: 카드처럼 컴포넌트 포갬

-컴포넌트 크기: 컨테이너 크기와 동일

 

*컨테이너의 default 배치관리자 (AWT, Swing 동일)

Window, Frame, Dialog : BorderLayout

Panel, Applet : FlowLayout

 

*컨텐트팬에 배치관리자 변경시

ex) FlowLayout으로 변경

//복습) 스윙에서는 컨텐트팬에만 컴포넌트 부착. 컨텐트팬은 Container 타입
Container contPane = frame.getContentPane();		//프레임에 부착된 컨텐트팬 알아내기
contPane.setLayout(new FlowLayout()); 	//new 필수 - 배치관리자 객체 생성

 

반응형

'언어! > Java' 카테고리의 다른 글

자바 이벤트 처리(2)_Key Event, Mouse Event  (1) 2021.05.09
자바 이벤트 처리(1)  (0) 2021.05.08
GUI 기초_AWT, Swing  (0) 2021.04.30
JAVA 복습 목표!  (0) 2021.04.30
Comments