이전 글에 이어서 배치 관리자에 대해서 좀 더 예제를 통해 자세히 알아보자 

 

배치 관리자에는 크게 4가지 유형이 있다고 했다. 

예제를 통해 각각의 배치 관리자를 이용하는 방법에 대해 공부해보자. 

 

 


 

1️⃣ FlowLayout

 

 FlowLayout은 삽입되는 컴포넌트들을 왼쪽에서 오른쪽으로, 그리고 다시 위에서 아래로 배치한다. 

 

 

🍀 생성자 

  • FlowLayout
    모든 설정을 디폴트 값으로 생성한다. 
  • FlowLayout(정렬 방법) 
    디폴트 정렬 방법은 중앙정렬이다. 정렬 방법에는 왼쪽, 중앙, 오른쪽 정렬이 있다.
    - FlowLayout.LEFT
    - FlowLayout.CENTER ( 디폴트 값 ) 
    - FlowLayout.RIGHT 
  • FlowLayout( 정렬 방법, 수평 간격, 수직 간격 ) 
    디폴트 값은 둘다 5이다. 
    컴포넌트 사이의 수평 간격과 수직 간격을 설정 할 수 있다. 

 

 

🍀  예제 문제 

 

 

위의 그림과 같이 GUI 프로그래밍을 하기 위해서는 배치 관리자의 종류로 FlowLayout을 사용하여  (FlowLayout.LEFT,30,40)으로 생성해주면 된다. 

 

package chapter8;

import javax.swing.*;
import java.awt.*;

public class FlowLayoutEx extends JFrame {

    FlowLayoutEx(){
        setTitle("FlowLayout Sample");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300,200);

        // 컨텐트 팬에 버튼 생성하기
        Container cp = getContentPane(); // 컨텐트 팬 알아내기
        cp.setLayout(new FlowLayout(FlowLayout.LEFT,30,40)); // 어떤식으로 배치 할지 설정하기

        cp.add(new JButton("add"));
        cp.add(new JButton("sub"));
        cp.add(new JButton("mul"));
        cp.add(new JButton("div"));
        cp.add(new JButton("calculate"));


        setVisible(true);
    }

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

}

 

 

 

2️⃣ BorderLayout

 

BorderLayout은 컴포넌트들을 5개의 구역으로 나눠서 배치하는 방법이다. 따라서 컴포넌트들에게 배치 할 구역을 지정해줘야한다. 

만약 지정해주지 않는다면 디폴트 값이 center이다. 

 

🍀 생성자 

  • BorderLayout()
  • BorderLayout( 수평 간격, 수직 간격 ) 
    디폴트 값은 모두 0 
  • add ( 컴포넌트 생성, 컴포넌트의 위치 설정 ) 
    - BorderLayout.NORTH
    - BorderLayout.SOUTH
    - BorderLayout.EAST
    - BorderLayout.WEST
    - BorderLayout.CENTER ( 디폴트 값 ) 

 

 

🍀 예제 문제 

 

 

 

컴포넌트들이 배치된 형태를 보았을때 BorderLayout을 사용하였음을 알 수 있다. 

BorderLayout의 생성자에게 값을 넘겨 위와 같이 GUI 화면을 출력해보자. 

 

package chapter8;

import javax.swing.*;
import java.awt.*;

public class BorderLayoutEx extends JFrame {
    BorderLayoutEx(){
        setTitle("BorderLayout 예제");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300,200);

        // 컨텐트 팬에 버튼 부착하기
        Container cp = getContentPane(); // 컨텐트 팬 알아내기
        cp.setLayout(new BorderLayout(30,20)); // 배치 관리자 설정
      //cp.setLayout(new BorderLayout()); // 디폴트값 0


        // 버튼 부착하기
        cp.add(new JButton("add"),BorderLayout.NORTH);
        cp.add(new JButton("sub"),BorderLayout.SOUTH);
        cp.add(new JButton("mul"),BorderLayout.EAST);
        cp.add(new JButton("div"),BorderLayout.WEST);
        cp.add(new JButton("calculate"),BorderLayout.CENTER); // BorderLayout.CENTER 안써도 됨

        setVisible(true);
    }

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

 

 

3️⃣ GridLayout 

 

GridLayout이란 컨테이너 공간을 동일한 크기의 격자로 나누어서 배치하는 방법이다. 

왼쪽에서 오른쪽으로, 다시 위에서 아래로 배치 할 수 있다. 

생성자를 통해 몇행 몇열로 배치 할 지도 결정할 수 있다. 

 

🍀 생성자

  • GridLayout() 
    디폴트 값은 1행 1열이다. 
  • GridLayout( 행, 열 ) 
  • GridLayout( 행, 열 , 수평 간격, 수직 간격) 
    수평, 수직 간격의 디폴트 값은 1이다. 

 

 

🍀 예제 문제 

 

 

컴포넌트들의 배치 형태를 보니 gridLayout 형태임을 알 수 있다. 

또한 1행 10열의 배치 구조로 각각의 버튼에 0~9의 인덱스를 설정하면 된다. 

 

package chapter8;

import javax.swing.*;
import java.awt.*;

public class GridLayoutEx extends JFrame {
    GridLayoutEx(){
        setTitle("GridLayout 예제");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 200);
       

        // 컨텐트 팬에 버튼 부착하기
        Container cp = getContentPane();
        // 1x 10열의 배치 관리자 생성하기
        cp.setLayout(new GridLayout(1, 10));
      //cp.setLayout(new GridLayout(2,5,5,5));

        for(int i=0;i<10;i++){
            String text = Integer.toString(i); // i를 문자열로 변환
            cp.add(new JButton(text));
        }

        setVisible(true);
    }

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

}

 

 

 

4️⃣ 배치 관리자가 없는 경우 

 

  • 컴포넌트의 크기나 위치를 개발자 임의로 설정하고 싶은 경우
  • 게임처럼 컴포넌트의 위치가 수시로 변하는 경우 
  • 컴포넌트들을 겹쳐서 출력하고자 하는 경우 

 

🍀  배치 관리자를 제거하는 방법

      -  컨테이너. setLayout ( null )

 

배치 관리자를 제거하면 컴포넌트의 크기는 0으로 설정되고 위치는 예측 할 수 없게 된다.

그래서 개발자가 컴포넌트의 크기와 위치를 지정해줘야한다

 

 

🍀  컴포넌트의 크기와 위치를 설정하는 메서드 

 

        -  void setSize(int widht, int height) 
             컴포넌트의 크기 설정
        -  void setLocation(int x, int y) 
             컴포넌트의 위치 설정 
         - void setBound(int x, int y, int width, int height) 
             위치와 동시에 크기를 설정 

      

 

 

🍀 예제 문제 

 

 

 

 

package chapter8;

import javax.swing.*;
import java.awt.*;

public class NullLayoutEx extends JFrame {

    NullLayoutEx(){
        setTitle("Layout이 없는 경우");
        setDefaultCloseOperation(EXIT_ON_CLOSE); // 종료시 프로세스도 같이 종료하기
        setSize(300, 300);
      
        // 컨텐트 팬 설정하기 
        Container cp = getContentPane();
        cp.setLayout(null); // 배치 관리자 없애기

        // 컴포넌트 설정하기
        JLabel la = new JLabel("Hello Press Button!");
        la.setSize(200,20); // la 컴포넌트의 크기 설정하기 
        la.setLocation(130,50); // la 컴포넌트의 위치 설정하기
        cp.add(la); // la 컨텐트 팬에 부착하기

        // 9개의 버튼 컴포넌트를 생성하고 동일한 크기로 설정
        // 위치는 서로 겹치지 않게 설정하기

        for(int i=1;i<10;i++){
            JButton b = new JButton(Integer.toString(i)); // 번호가 있는 버튼 생성
            b.setSize(50,20); // 버튼의 크기 설정
            b.setLocation(i * 15, i * 15); // 버튼의 위치 설정
            //b.setBounds(i*15,i*15,50,20);
            cp.add(b); // 컨텐트 팬에 부착하기
        }


        setVisible(true); // 화면에 프레임 출력하기
    }

    public static void main(String[] args) {
        new NullLayoutEx(); // 코드의 최소화
    }
}

'자바 개념 > 수업 내용 정리' 카테고리의 다른 글

8장 실습 문제  (0) 2024.06.15
8장 스윙 기초  (0) 2024.06.02

+ Recent posts