2 분 소요

swing 레이아웃



swing

GUI 프로그래밍 : 그래픽을 이용하여 사용자에게 이해하기 쉽고 사용하기 쉬운 입출력 인터페이스를 제공함. 마우스나 키보드를 이용하여 직관적으로 입력.
스윙(swing) : 자바의 GUI(Graphic User Interface) 프로그래밍에 필요한 각종 킷을 모아놓은 것으로 GUI의 기능들을 구현할 수 있는 2D, Drag&Drop 등 을 지원함. AWT 와 달리 자바 프로그래밍 자체적인 컴포넌트이므로 플랫폼에 관계없이 모양이 동일하게 사용됨.
JFrame : 윈도우 창을 만드는 java.awt.Frame을 계승한 컨테이너임.


그럼 윈도우 창을 만드는 코드를 살펴보자.

import javax.swing.*;

public class Swing1 {
    public static void main(String[] args) {
        JFrame jf1 = new JFrame();
        jf1.setSize(400,400); // width, height
        jf1.setVisible(true);

    }
}

이미지
이때 setVisible()에 true를 넣게 되는데 setVisible()는 프레임을 보이게 할지 정해줄 수 있음.


다음으로 윈도우 창 내부에 버튼을 만드는 코드를 보자.

import javax.swing.*;

public class Swing1 {
    public static void main(String[] args) {
        JFrame jf1 = new JFrame();
        JButton btn1 = new JButton("클릭하세요!");       // JButton를 사용하여 버튼을 생성할 수 있음.
        btn1.setBounds(100,100,100,40);     // 버튼의 위치 및 크기를 지정

        jf1.add(btn1);        // jf1에 버튼 추가
        jf1.setSize(400,400); // width, height
        jf1.setLayout(null);
        jf1.setVisible(true);

    }
}

이미지
setLayout()은 레이아웃을 정할때 사용하며 특정 레이아웃을 정하지 않았을때 null를 기입함.


레이아웃

FlowLayout : 레이아웃중 가장 기초적이고 자주 사용되는 레이아웃으로 컴포넌트를 왼쪽 상단부터 차례대로 정렬

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

public class FlowLayout1 {
    public static void main(String[] args) {
        JFrame fr = new JFrame("플로우 레이아웃");
        JPanel pn = new JPanel();
        JButton[] bt = new JButton[10]; // 버튼 참조변수만 선언

        FlowLayout fl = new FlowLayout();
        fl.setAlignment(FlowLayout.LEFT); // 정렬 방법
        pn.setLayout(fl);  // 레이아웃 설정

        for (int i = 0; i < bt.length; i++) {
            bt[i] = new JButton("버튼" + i);  // 버튼 객체 생성
            pn.add(bt[i]); // 버튼을 패널로써 추가함.
        }
        fr.setContentPane(pn);
        fr.setSize(500,500);
        fr.setVisible(true);
    }
}


JPanel은 가장 기초가 되는 메인 프레임인 JFrame의 보조 프레임으로 보면됨.

이미지


BorderLayout : 동서남북중, 총 5구역으로 나눠져 있으며, 한 구역에 하나의 panel 만 배치할 수 있음. 단, 레이아웃을 설정하지 않으면 기본(중)으로 사용

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

public class BorderLayout1 {
    public static void main(String[] args) {
        JFrame fr = new JFrame("보더레이아웃");
        JPanel pn = new JPanel();
        JButton[] bt = new JButton[5];

        BorderLayout bl = new BorderLayout();
        pn.setLayout(bl);

        for (int i = 0; i < bt.length; i++) {
            bt[i] = new JButton("버튼" + i);
        }

        pn.add(bt[0], BorderLayout.NORTH);
        pn.add(bt[1], BorderLayout.EAST);
        pn.add(bt[2], BorderLayout.CENTER);
        pn.add(bt[3], BorderLayout.WEST);
        pn.add(bt[4], BorderLayout.SOUTH);

        fr.setContentPane(pn);
        fr.setSize(500,500);
        fr.setVisible(true);
    }
}
<br>

이미지


GridLayout : 격차처럼 사용할 수 있는 레이아웃. 총 사용가능한 그리드 수 보다 컴포넌트가 적거나 같아야함

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

public class GridLayout1 {
    public static void main(String[] args) {
        JFrame fr = new JFrame("그리드 레이아웃");
        JPanel pn = new JPanel();
        JButton[] bt = new JButton[4];

        GridLayout gl = new GridLayout(2,1);
        pn.setLayout(gl);

        for (int i = 0; i < bt.length; i++) {
            bt[i] = new JButton("버튼" + i);
            pn.add(bt[i]);
        }

        fr.setContentPane(pn);
        fr.setSize(500,500);
        fr.setVisible(true);
    }
}

이미지

태그:

카테고리:

업데이트: