본문 바로가기

Today I Learned

JAVA LayoutManager(배치관리자) : BorderLayout

LayoutManager를 사용하면 자바 스윙의 컴포넌트들의 좌표를 자동으로 계산하여 배치해준다.

 

1. Border Layout

BorderLayout을 사용하여 여러가지 패널을 배치한 모습

BorderLayout은 컴포넌트들을 NORTH, SOUTH, WEST, EAST, CENTER 방향으로 배치할 수 있으며

가장 많이 사용되는 레이아웃이기도 하다.

사용하기 위해서는 아래와 같이 코드를 작성하면 된다.

public class BorderLayoutEX {

	public static void main(String[] args) {
		
		//BorderLayout = A BorderLayout places components in five area
		//NORTH, SOUTH, WEST, EAST, CENTER
		//all extra space is placed in the center area
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(500,500);
		frame.setLayout(new BorderLayout(10, 10));
		frame.setVisible(true);
		
		JPanel panel1 = new JPanel();
		JPanel panel2 = new JPanel();
		JPanel panel3 = new JPanel();
		JPanel panel4 = new JPanel();
		JPanel panel5 = new JPanel();
		
		panel1.setBackground(Color.red);
		panel2.setBackground(Color.green);
		panel3.setBackground(Color.yellow);
		panel4.setBackground(Color.magenta);
		panel5.setBackground(Color.blue);
        
        	panel1.setPreferredSize(new Dimension(100,100));
		panel2.setPreferredSize(new Dimension(100,100));
		panel3.setPreferredSize(new Dimension(100,100));
		panel4.setPreferredSize(new Dimension(100,100));
		panel5.setPreferredSize(new Dimension(100,100));
        }

먼저 예제를 위하여 최상위 프레임인 JFrame을 만들고 사이즈를 500,500으로 설정하였다.

레이아웃을 사용하기 위해서는 setLayout()키워드를 사용한다.

frame.setLayout(new BorderLayout(10,10));

괄호 안의 10,10은 마진(여백)을 설정해준 것이다.

 

다섯 개의 다양한 색깔의 패널을 만들고

frame에 add 키워드로 컴포넌트를 자식으로 등록하면서

동시에 BorderLayout으로 자식 컴포넌트들의 위치를 등록해준다.

//set components
		frame.add(panel1, BorderLayout.NORTH);
		frame.add(panel2, BorderLayout.WEST);
		frame.add(panel3, BorderLayout.EAST);
		frame.add(panel4, BorderLayout.SOUTH);
		frame.add(panel5, BorderLayout.CENTER);

그러면 위와 같이 패널이 추가된 것을 확인할 수 있다.

여기서 중요한 점은 부모 객체에 setLayout을 하고,

자식 객체에 NORTH, SOUTH, WEST, EAST, CENTER 위치를 등록해준다는 점이다.

 

CENTER에는 파란색의 panel5가 위치하는데,

이 안에도 추가로 자식 컴포넌트들을 배치할 수 있다.

아래와 같이 sub panel 다섯 개를 추가하고 

panel5에 setLayout으로 BorderLayout을 적용한다. 이제 panel5는 부모 객체이다.

		//--------------------sub panels-----------------------
		
		JPanel panel6 = new JPanel();
		JPanel panel7 = new JPanel();
		JPanel panel8 = new JPanel();
		JPanel panel9 = new JPanel();
		JPanel panel10 = new JPanel();
		
		panel6.setBackground(Color.black);
		panel7.setBackground(Color.darkGray);
		panel8.setBackground(Color.gray);
		panel9.setBackground(Color.lightGray);
		panel10.setBackground(Color.white);
		
		panel5.setLayout(new BorderLayout());
		
		panel6.setPreferredSize(new Dimension(50,50));
		panel7.setPreferredSize(new Dimension(50,50));
		panel8.setPreferredSize(new Dimension(50,50));
		panel9.setPreferredSize(new Dimension(50,50));
		panel10.setPreferredSize(new Dimension(50,50));

 

add 키워드로 panel5에 panel6,panel7,panel8,panel9,panel10을 자식 객체로 등록한다

		panel5.add(panel6, BorderLayout.NORTH);
		panel5.add(panel7, BorderLayout.SOUTH);
		panel5.add(panel8, BorderLayout.WEST);
		panel5.add(panel9, BorderLayout.EAST);
		panel5.add(panel10, BorderLayout.CENTER);

그러면 위와 같이 CENTER에 해당하는 panel5에 패널 컴포넌트 다섯 개가 추가된 것을 확인할 수 있다.

가운데에 있는 panel10에 한번 더 추가할 수도 있다.

이런 모양이 나온다

BorderLayout은 굉장히 다양한 툴에 사용되는 레이아웃 방식이기 때문에 자세히 알아두면 좋을것 같다는 생각이다.