simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바프로그램
  • null
  • 참조타입
  • 자바프로그래밍
  • JVM메모리구조
  • 스프링
  • 404
  • 자바메모리구조
  • 참조변수
  • 컨트롤러
  • scanner #next() #nextLine()
  • controllerTest
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

[자바API_AWT/Swing] 배치관리자와 레이아웃 종류(2)_윈도우창(JFrame) 예제
Language/Java

[자바API_AWT/Swing] 배치관리자와 레이아웃 종류(2)_윈도우창(JFrame) 예제

2022. 3. 27. 22:21

■ 공통부분

- 윈도우창이기에 컨테이너는 JFrame을 사용한다.

- 아래의 예제들에서 JFrame의 세팅값(위치/크기/보임상태/종료버튼방식)은 모두 동일하게 할 것이다.

 

■ BorderLayout

- JFrame컨테이너의 디폴트 배치관리자는 BorderLayout이다.

- BorderLayout은 컴포넌트 간격을 지정하지 않을 거면 초기화를 딱히 해줄게 없다.

- 컴포넌트를 넣어줄 때 어느 영역(North/South/West/East/Center)에 위치시킬지 지정해준다.

package window;

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class BorderLayoutTest extends JFrame{
	
	BorderLayoutTest(){

		//JFrame의 기본 세팅 메소들 
		this.setTitle("BorderLayout Test");
		this.setLocation(200,200);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//버튼 컴포넌트를 5개 추가 - add()
		//[레이아웃] 디폴트로 BorderLayout으로 설정되어 있음
		//[1] 먼저 버튼 객체부터 생성한다.
		//    **버튼 생성메소드 JButton("버튼 안에 들어갈 문자열")
		//                               이미지나 아이콘도 넣을 수 있다.
		JButton jbtNorth = new JButton("NORTH");
		JButton jbtSouth = new JButton("SOUTH");
		JButton jbtWest = new JButton("WEST");
		JButton jbtEast = new JButton("EAST");
		JButton jbtCenter = new JButton("CENTER");
		//[2] 버튼을 컨테이너에 넣어둔다. **이때, 버튼이 들어갈 위치를 지정한다.
		this.add(jbtNorth,BorderLayout.NORTH);
		this.add(jbtSouth,"South");
		this.add(jbtWest,BorderLayout.WEST);
		this.add(jbtEast,"East");
		this.add(jbtCenter); //생략시 디폴트 CENTER로 지정
		
		//[유의점] 버튼 컴포넌트들을 먼저 JFrame에 넣어주고 JFrame 사이즈를 잡아줘야 한다.
		//         why? BorderLayout에서는 윈도우창 크기에 따라서 버튼의 너비가 자동 설정되기 때문.
		this.setSize(400,400);
		
		
	
	}

	public static void main(String[] args) {
		new BorderLayoutTest();
	}

}

>> 실행 결과

 

■ FlowLayout

- JFrame컨테이너의 디폴트 배치관리자는 BorderLayout이다.

- Container의 setLayout() 메소드를 사용해서 레이아웃을 FlowLayout으로 변경한다.

  *레이아웃도 객체이기 때문에 레이아웃 객체 생성을 먼저 해줘야한다.

- FlowLayout을 생성할 때 컴포넌트들의 정렬방식과 수평/수직 간격을 초기화해준다.

  *기본적으로 최상단부터 나열시키는데, 정렬방식은 그의 좌(LEADING), 중간(CENTER), 끝(TRAILING) 중 하나를 고를 수 있다.

package window;

import java.awt.FlowLayout;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class FlowLayoutTest extends JFrame{
	
	FlowLayoutTest() {
		//JFrame 기본 세팅
		this.setTitle("FlowLayout Test");
		this.setLocation(400,400);
		this.setVisible(true);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		//Container 레이아웃 변경
		//[참고] setLayout()의 매개변수는 LayoutManager 인터페이스다.
		//[생성시] 정렬방식, 수직/수평간격 지정
		this.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));;
		
		//컴포넌트들을 생성해서 넣어준다.
		JLabel label = new JLabel("Select Language");
		this.add(label);
		
		String[] comLang = {"Java","C","C++","PHP","Javascript","python"};
		JComboBox<String> comLangBox = new JComboBox<String>(comLang);
		comLangBox.setSelectedIndex(0);
		this.add(comLangBox);
		
		this.setSize(400,400);
	}
	
	public static void main(String[] args) {
		new FlowLayoutTest();
	}
}

>> 실행결과

 

■ GridLayout

- Container의 setLayout() 메소드를 사용해서 레이아웃을 GridLayout으로 변경한다.

  *이번에도 레이아웃 객체생성을 먼저한다.

- Grid레이아웃을 생성할 때, 행/열 갯수, 수평/수직 간격을 초기화한다.

- Grid는 행을 우선으로 해서 컨포넌트들의 열의 너비를 지정하므로 이점을 유의한다.

package window;

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GridTest extends JFrame{
	
	public GridTest() {
		super("GridLayout Test");
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocation(200,200);
		
		//Grid로 레이아웃 변경
		GridLayout g = new GridLayout(3,3,10,10);
		this.setLayout(g);
		
		//컴포넌트 생성, 추가
		for(int i = 0; i < 10; i++) {
			JPanel jp1 = new JPanel();
			jp1.add(new JLabel("PANEL"));
			jp1.setSize(30,30);
			Color c = new Color(0xfe9cc3);
			jp1.setBackground(c);
			this.add(jp1);
		}
		
		
		setSize(400,400);
		
	}

	public static void main(String[] args) {
		new GridTest();
	}

}

>> 실행 결과

 

■ CardLayout

- JFrame 윈도우창의 디폴트 BorderLayout배치는 그대로 둔다.

- 윈도우 창 상단에 패널+버튼들로 탭을 만든다. *패널 - FlowLayout

- 윈도우 창 하단에 패널+패널들로 카드를 만든다. *패널 - CardLayout

  *묶어주는 안에 카드를 넣을 때는, 문장열로 카드명을 지정한다.

package window;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CardTest extends JFrame{

	public CardTest(){
		super("GridLayout Test");
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLocation(200,200);
		
		//메뉴상단만들기
		JPanel menu = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20));
		JButton jbt1 = new JButton("< Previous");
		JButton jbt2 = new JButton("CARD");
		jbt2.setBackground(Color.MAGENTA);
		JButton jbt3 = new JButton("Next >");
		menu.add(jbt1);
		menu.add(jbt2);
		menu.add(jbt3);
		this.add(menu,"North");
		
		//카드 만들기
		JPanel cardSet = new JPanel(new CardLayout());
		cardSet.add(new Screen1(),"s1");
		cardSet.add(new Screen2(),"s2");
		cardSet.add(new Screen2(),"s3");
		this.add(cardSet);
		
		
		setSize(400,400);
	}

	public static void main(String[] args) {
		new CardTest();
	}

}

class Screen1 extends JPanel{

	public Screen1(){
		this.setLayout(new BorderLayout());
		Color c = new Color(0xe43e22);
		JLabel label = new JLabel("안녕!",JLabel.CENTER);
		this.setBackground(c);
		this.add(label,"Center");
	}
	
}
 
class Screen2 extends JPanel{
	public Screen2() {
		this.setLayout(new BorderLayout());
		Color c = new Color(0x1ab6a8);
		JLabel label = new JLabel("잘 지냈어?",JLabel.CENTER);
		this.setBackground(c);
		this.add(label,"Center");
	}
}

class Screen3 extends JPanel{
	public Screen3() {
		this.setLayout(new BorderLayout());
		Color c = new Color(0x985396);
		JLabel label = new JLabel("이번주 주말에 뭐해?",JLabel.CENTER);
		this.setBackground(c);
		this.add(label,"Center");
	}
}

>> 실행 결과

 

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

[자바API_AWT/Swing] 키보드 이벤트 구현하기  (0) 2022.03.28
[자바API_AWT/Swing] 버튼 이벤트 구현하기  (0) 2022.03.28
[자바의정석_예제] 객체지향프로그래밍1  (0) 2022.03.27
[자바의정석_예제] 조건문과 반복문  (0) 2022.03.27
[자바API_AWT/Swing] 배치관리자와 레이아웃 종류  (0) 2022.03.26
    'Language/Java' 카테고리의 다른 글
    • [자바API_AWT/Swing] 키보드 이벤트 구현하기
    • [자바API_AWT/Swing] 버튼 이벤트 구현하기
    • [자바의정석_예제] 객체지향프로그래밍1
    • [자바의정석_예제] 조건문과 반복문
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바