본문 바로가기

자바공부

자바 배치관리자 없는 컨테이너, 명품자바프로그래밍9장

728x90
반응형

* 모든 컨테이너는 배치관리자를 반드시 가지고, 배치관리자가 컴포넌트의 위치와 크기를 결정하도록 하는 것이 자바 GUI의 기본 정신이다.

배치관리자는 컴포넌트를 절대적인 위치에 배치하지 않고, 각 컴포넌트를 다른 컴포넌트의 위치에 대해 상대적인 위치에 배치한다.

그러므로 컨테이너의 크기가 변하면 컴포넌트의 위치도 함께 변한다.

 

배치관리자를 사용하면 컴포넌트의 위치에 대해서 신경 쓰지 않아도 되지만, 현실에서는 자바의 배치관리자들로는 구성하기 어려운 사용자 인터페이스를 만들어야 하는 경우가 종종 발생한다.

ex.1) 컴포넌트의 크기나 위치를 개발자 임의로 결정하고자 하는 경우

ex.2) 게임 프로그램과 같이 시간이 마우스/키보드의 입력에 따라 컴포넌트의 위치와 크기가 수시로 변하는 경우

ex.3) 여러 컴포넌트들이 서로 겹치는 효과를 연출하고자 하는 경우

이런 경우, 응용프로그램이 배치관리자 없이 컴포넌트의 위치와 크기를 마음대로 설정할 수 있어야 한다.

 

* setLayout(null) 메소드를 이용하여 컨테이너의 배치관리자를 제거할 수 있다.

JPanel p = new JPanel();
p.setLayout(null); // 컨테이너의 배치관리자를 제거

 

* 배치관리자가 없는 컨테이너에 컴포넌트를 추가하면 컴포넌트의 위치나 크기를 조절하는 어떤 배치도 일어나지 않는다.

그러므로 컴포넌트는 0 x 0 크기로 설정되고 보이지 않게된다.

 

* 배치관리자가 없는 컨테이너에 컴포넌트를 삽입할 때는 응용프로그램에서 컴포넌트의 크기와 위치를 직접 설정하여야 한다.

컴포넌트의 절대적 위치와 크기를 설정하기 위해서는 모든 컴포넌트들이 상속받는 java.awt.Component 클래스의 메소드를 이용한다.

void setSize(int width, int height);	// 컴포넌트를 width x height의 크기로 설정
void setLocation(int x, int y);	//컴포넌트의 왼쪽 상단 모서리 좌표를 (x, y)로 설정
void setBounds(int x, int y, int width, int height); // 크기와 위치를 동시에 설정

 

* CardLayout을 제외한 나머지 배치관리자는 모든 컴포넌트들이 서로 겹치지 않도록 배치한다.

그러나 배치관리자가 없는 컨테이너를 만들면 컨테이너를 절대 위치에 절대 크기로 마음대로 배치할 수 있기 때문에 컴포넌트들이 서로 겹치도록 배치할 수 있다.

 

* 컴포넌트 100 x 40, JPanel (50,50)에 위치한 버튼

JPanel p = new JPanel();
p.setLayout(null);
JButton clickButton = new JButton("Click");
clickButton.setSize(100, 40);
clickButton.setLocation(50, 50);
p.add(clickButton);
반응형