Java에는 여러가지 Layout 매니저가 많다
많이들 쓰는 GridLayout, FlowLayout 이 있는데

오늘은 참 복잡하고 애매한 클래스인 GridBagLayout 클래스에 대해 적어보겠다..

읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


 
  Grid Bag Layout() 은 컴포넌트의 위치와 크기를 자유롭게 만들 수 있는
레이아웃 매니저로서 사용하기가 복잡하지만 강력하다.
 GridBagConstraints 객체에 저장된 여러 제약에 따라 컴포넌트를 배열한다.

라고 예전 PPT로 과제 제출 했던걸 적어보았다

복잡한 클래스인 만큼 설명하기에도 참 난감할 수 밖에 없다.

그러므로 우선 소스 부터 보고! 시작해볼까!!!
술렁~술렁~

import java.awt.*;
import java.util.*;
class Grid100 extends Panel
{
 GridBagConstraints c;
 public Grid100()
 {
  GridBagLayout gridbag=new GridBagLayout();
  setLayout(gridbag);
  c=new GridBagConstraints();
  c.weightx=1.0;
  c.weighty=1.0;
  // 여백을 분배하는 변수, 모두0이면 가운데로 모임.
 
  c.fill=GridBagConstraints.BOTH; // 전체를 채워라
 
  layout(new Button("1번째"),0,0,1,2);  // 버튼생성 + 부착
  layout(new Button("2번째"),1,1,1,1);
  layout(new Button("3번째"),2,1,1,1);
  layout(new Button("4번째"),3,1,3,1);
  layout(new Button("5번째"),0,2,1,2);
  layout(new Button("6번째"),1,2,1,1);
  layout(new Button("7번째"),1,3,1,1);
  layout(new Button("8번째"),2,2,1,1);
  layout(new Button("9번째"),2,3,1,1);
  layout(new Button("10번째"),3,2,3,2);
 // layout(new Button(),4,4,1,1);
 // layout(new Button(),5,4,1,1);
 }
 public void layout(Component obj, int x, int y,int width, int height)
 {
  c.gridx=x; // 시작위치 x
  c.gridy=y; // 시작위치 y
  c.gridwidth=width; // 컨테이너 너비
  c.gridheight=height;  // 컨테이너 높이
  add(obj,c);
 }
 public static void main(String[] args)
 {
  Frame test=new Frame();
  test.setSize(500,300);
  test.add(new Grid100());
  test.setVisible(true);
 }
}



[ GridBagLayout ]

버튼의 배치가 자유롭게 자유롭게~자유롭게?? 할 수 있다고 전해지고 있지만
내 생각엔 여러 제약 때문에 쉽지가 않다.
그러므로 사용을 권하기가 쉽지 않은 거 또한 사실...이지만!!!
다른 타 Layout 매니저 보다는 자유로운것 또한 사실...

우선 GridBagLayout 을 사용하기 위해선 

1. 생성자를 이용하여 그리드백 레이아웃을 만든다
GridBagLayout gridbag = new GridBagLayout();
 
2. 그리드백 콘스트레인을 만든다
GridBagConstraints  constraint  =  new  GridBagContraints();
3. 컨테이너의  레이아웃  매니저를  그리드백  레이아웃으로  설정한다.
setLayout(gridbag);

이러면 우선 사용 가능 상태 돌입!!


c.fill=GridBagConstraints.BOTH; // 전체를 채워라
중요한건 이 부분 인데... 이 부분을 주석처리 해보면 아마 결과 확인 가능할 것이다..무슨 뜻일지...;;;
설명을 붙이자면 레이아웃 안에 있는 컴포넌트들의 크기를 설정하기에 간편하다


[ c.fill=GridBagConstraints.BOTH; 부분 주석처리 후 실행 ]

그런의미에서 멤버 필드!
 
GridBagConstraints.NONE  으로  설정되면  컨테이너의  크기는  변경되지  않는다.
GridBagConstraints.HORIZONTAL  으로  설정되면  가로축이  확장된다.
GridBagConstraints.VERTICAL  으로  설정되면  세로축이  확장된다.
GridBagConstraints.BOTH    경우에는  가로/세로  방향으로  모두  확장된다.

 
1) gridx,  gridy
컴포넌트의  좌측  상단  모서리의  시작위치를  지정한다.

2)  gridwidth,  gridheight
컴포넌트가  화면에  출력되는  행과  열의  (cell)수를  지정한다

3)  ipadx,  ipady
내부의  여백을  결정한다.

4)  weightx,  weighty
컴포넌트의  크기가  변경될    변경되는  크기를  제어한다.
weightx,  weighty  값이  0  경우에는  크기가  변경되지  않는다.

근데.. 안 좋은 점이 내가 만들고 싶던 모양은 이런거 였었다...

처음과 4번째 버튼과 10번재 버튼 모양이 다르다...
난 이 모양을 만들려고 애를 써봤지만 결국 안됬는데.... 어쩔 수 없이.........

이렇게 할 수 밖에 없었어.................ㅠㅠㅠㅠㅠㅠㅠ






블로그 정보 이미지
『아름다운 사표』,『인생을 바꾸는 기적의 블로그』,『1인분 청춘』의 저자, 작가, 강사, 글쟁이, 블로거, 문화 콘텐츠 매니저, skatldjs@gmail.com