728x90
BorderLayout 개념
BorderLayout은 동(east), 서(west), 남(south), 북(north), 중앙(center)으로 나눠서 컴포넌트들의 자리를 배치한다.
컴포넌트의 크기는 무조건 레이아웃에 맞춘다. 그렇기 때문에 굳이 컴포넌트의 크기를 설정할 필요가 없다.
또 BorderLayout의 add() 메서드의 두번째 인자값으로 배치할 곳을 명시하지 않을 경우 자동으로 CENTER에 들어가게 된다
BorderLayout 예제
package sec_borderLayout.exam01;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test1 extends JFrame{
public Test1() {
setSize(400, 200);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
JButton btns[] = new JButton[5];
//setLayout(new BorderLayout(30, 10));
for (int i = 0; i < btns.length; i++) {
btns[i] = new JButton("Button "+(i+1));
}
add(btns[0], BorderLayout.EAST);
add(btns[1], BorderLayout.WEST);
add(btns[2], BorderLayout.SOUTH);
add(btns[3], BorderLayout.NORTH);
add(btns[4], BorderLayout.CENTER);
}
public static void main(String[] args) {
new Test1().setVisible(true);
}
}
자바의 JFrame은 기본적으로 레이아웃이 BorderLayout이다.
그래서 위의 코드를 실행하면 JFrame 레이아웃을 따로 설정해주지 않아도 잘 배치가 됨을 알 수 있다.
//setLayout(new BorderLayout(30, 10));
위의 코드를 주석 해제하여 아래의 코드와 같이 만들어보자.
주석을 해제한 코드
더보기
더보기
package sec_borderLayout.exam01;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test1 extends JFrame{
public Test1() {
setSize(400, 200);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
JButton btns[] = new JButton[5];
setLayout(new BorderLayout(30, 10));
for (int i = 0; i < btns.length; i++) {
btns[i] = new JButton("Button "+(i+1));
}
add(btns[0], BorderLayout.EAST);
add(btns[1], BorderLayout.WEST);
add(btns[2], BorderLayout.SOUTH);
add(btns[3], BorderLayout.NORTH);
add(btns[4], BorderLayout.CENTER);
}
public static void main(String[] args) {
new Test1().setVisible(true);
}
}
setLayout(new BorderLayout(30, 10));
그럼 컴포넌트 간에 간격이 생긴다.
BorderLayout 클래스는 기본 생성자도 있지만 컴포넌트 간의 좌우, 상하 간격을 주려면 2개의 매개변수를 넣어준다.
첫 번째 인자값은 좌우 간격(hgap the horizontal gap), 두 번째 인자값은 상하 간격(vgap the vertical gap)을 뜻한다.
위의 코드는 new BorderLayout(30, 10)을 호출함으로 30의 좌우간격, 10의 상하간격이 있는 BorderLayout이 된다.