Swing

김영준·2024년 12월 17일

자바_학교

목록 보기
3/4

용어 설명

스윙 프레임

: 모든 스윙 컴포넌트를 담는 최상위 컨테이너

컨테이너

: 다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트 -> 도화지

컴포넌트

: 물건 (도화지 위에 물건을 차곡차곡 올려놓는 것) , 물감

Jframe

-> 전체 창
(Jframe > ContentPane(컨테이너라고 생각) > 컴포넌트)
Jframe을 큰 쟁반이라고 생각하면 여러 큰 접시들을 ContentPane이고, 그 안의 작은 접시들은 컨테이너, 그 위에 작은 음식들을 컴포넌트

코드 설명

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

-> 프레임 종료버튼이 클릭될 때, 프레임과 함께 프로그램을 종료시키는 방법

배치 관리자

요약

A. FlowLayout 배치관리자
컴포넌트가 삽입되는 순서대로 왼쪽에서 오른쪽으로 배치
배치할 공간이 없으면 아래로 내려와서 반복한다.

B. BorderLayout 배치관리자
컨테이너의 공간을 동(EAST), 서(WEST), 남(SOUTH), 북(NORTH), 중앙(CENTER)의 5개 영역으로 나눔
 5개 영역 중 응용프로그램에서 지정한 영역에 컴포넌트 배치

C. GridLayout 배치관리자
컨테이너를 프로그램에서 설정한 동일한 크기의 2차원 격자로 나눔
컴포넌트는 삽입 순서대로 좌에서 우로, 다시 위에서 아래로 배치

D. CardLayout
컨테이너의 공간에 카드를 쌓아 놓은 듯이 컴포넌트를 포개어 배치

FlowLayout

생성자

FlowLayout(int align, int hGap, int vGap)

  • align : 컴포넌트를 정렬하는 방법 지정. 왼쪽 정렬(FlowLayout.LEFT), 오른쪽 정렬(FlowLayout.RIGHT), 중앙 정렬(FlowLayout.CENTER(디폴트))
  • hGap : 좌우 두 컴포넌트 사이의 수평 간격, 픽셀 단위. 디폴트는 5
  • vGap : 상하 두 컴포넌트 사이의 수직 간격, 픽셀 단위. 디폴트는 5

BorderLayout

생성자

BorderLayout(int hGap, int vGap)

  • hGap : 좌우 두 컴포넌트 사이의 수평 간격, 픽셀 단위(디폴트 : 0)
  • vGap : 상하 두 컴포넌트 사이의 수직 간격, 픽셀 단위(디폴트 : 0)

add() 메서드

void add(Component comp, int index)
 comp 컴포넌트를 index 위치에 삽입한다.
 index : 컴포넌트의 위치
동 : BorderLayout.EAST 서 : BorderLayout.WEST
남 : BorderLayout.SOUTH 북 : BorderLayout.NORTH
중앙 : BorderLayout.CENTER

GridLayout

생성자

GridLayout(int rows, int cols, int hGap, int vGap)

  • rows : 격자의 행수 (디폴트 : 1)
  • cols : 격자의 열수 (디폴트 : 1)
  • hGap : 좌우 두 컴포넌트 사이의 수평 간격, 픽셀 단위(디폴트 : 0) -> 없어도 됨
  • vGap : 상하 두 컴포넌트 사이의 수직 간격, 픽셀 단위(디폴트 : 0) -> 없어도 됨
  • rows x cols 만큼의 셀을 가진 격자로 컨테이너 공간을 분할, 배치

배치 관리자 제거

-> 컴포넌트를 절대 위치와 절대 크기로 설정하는 방법

container.setLayout(null);

이후 컴포넌트는 절대 위치와 크기를 개발자가 수동으로 설정해야함

setSize(int width, int height)

컴포넌트의 크기를 설정합니다.
setLocation(int x, int y)

컴포넌트의 위치를 설정합니다.
x: 왼쪽으로부터의 거리
y: 위쪽으로부터의 거리
setBounds(int x, int y, int width, int height)

위치(x, y)와 크기(width, height)를 동시에 설정합니다.

<예시 코드>

package Swing;

import javax.swing.*;

public class AbsolutePositionExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("배치관리자 제거 예제");
        frame.setSize(600, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null); // 배치관리자 제거

        // 버튼 생성 및 절대 위치/크기 설정
        JButton button1 = new JButton("Button 1");
        button1.setSize(100, 40);
        button1.setLocation(50, 30);

        JButton button2 = new JButton("Button 2");
        button2.setBounds(100, 80, 100, 40); // 위치와 크기 동시 설정

        // 패널에 버튼 추가
        panel.add(button1);
        panel.add(button2);

        // 패널을 프레임에 추가
        frame.add(panel);
        frame.setVisible(true);
    }
}

Container ContentPane = getContentPane();

-> JFrame은 틀
ContentPane은 가장 기본적인 컨테이너
JPanel은 추가적인 컨테이너

-> JFrame은 컴포넌트를 추가할 때 자동으로 ContenPane을 사용하게 됨

<예시코드>
import javax.swing.*;

public class AbsolutePositionExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("배치관리자 제거 예제");
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null); // 배치관리자 제거

        // 버튼 생성 및 절대 위치/크기 설정
        JButton button1 = new JButton("Button 1");
        button1.setSize(100, 40);
        button1.setLocation(50, 30);

        JButton button2 = new JButton("Button 2");
        button2.setBounds(100, 80, 100, 40); // 위치와 크기 동시 설정

        // 패널에 버튼 추가
        panel.add(button1);
        panel.add(button2);

        // 패널을 프레임에 추가
        frame.add(panel);
        frame.setVisible(true);
    }
}

setSize(300,200)은 처음 나타날 때 JFrame의 크기를 나타냄

profile
개발의 신이 될거다

0개의 댓글