Java Swing에서 레이아웃 매니저(Layout Manager)는 컨테이너에 추가된 컴포넌트의 위치와 크기를 자동으로 배치해 주는 역할을 합니다. 반면 레이아웃 매니저를 사용하지 않으면 각 컴포넌트의 위치와 크기를 개발자가 직접 지정해야 하는데, 이때 활용되는 것이 바로 setBounds() 메소드입니다. 컴포넌트를 수동으로 배치하려면 프레임의 레이아웃 매니저를 null로 설정하면 됩니다.
setBounds() 메소드의 구조
setBounds() 메소드는 총 네 개의 정수형 인수를 받습니다. 첫 번째와 두 번째 인수는 컴포넌트 왼쪽 상단 모서리의 x, y 좌표를 나타내고, 세 번째 인수는 컴포넌트의 너비(width), 네 번째 인수는 높이(height)를 의미합니다.
구문(Syntax)
setBounds(int x좌표, int y좌표, int 너비, int 높이)
예제 코드
다음은 JFrame 안에 JButton을 생성한 뒤 setBounds()로 위치와 크기를 지정하는 간단한 예제입니다.
import javax.swing.*;
import java.awt.*;
public class SetBoundsTest {
public static void main(String arg[]) {
JFrame frame = new JFrame("SetBounds Method Test");
frame.setSize(375, 250);
// 레이아웃을 null로 설정
frame.setLayout(null);
// 버튼 생성
JButton button = new JButton("Hello Java");
// 버튼의 위치와 크기 설정
button.setBounds(80, 30, 120, 40);
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
실행 결과
위 코드를 실행하면 프레임 내 지정된 좌표(80, 30)에 너비 120, 높이 40 크기의 버튼이 배치된 것을 확인할 수 있습니다.

정리 및 참고 사항
setBounds()를 활용한 절대 배치(absolute positioning)는 원하는 위치에 컴포넌트를 정확하게 놓을 수 있다는 장점이 있습니다. 하지만 창 크기가 변경되거나 해상도가 다른 환경에서는 화면 배치가 깨질 수 있다는 단점이 있습니다. 따라서 간단한 테스트나 학습 목적 외에는 BorderLayout, FlowLayout, GridBagLayout과 같은 레이아웃 매니저를 사용하는 것이 일반적으로 권장됩니다.