JAVA GridBagLayout Demo

컴포넌트의 위치와 크기를 자유롭게 설정할 수 있는 레이아웃매니저이다.
그러나 사용하기가 복잡하기 때문에 JBuilder와 같은 개발도구에서 많이 사용된다.

그리드백 레이아웃은 크기와 위치를 설정하기위해 추가적으로 GridBagConstrains클래스를
이용한다.

그리드백 레이아웃을 사용하기 위한 기본적인 절차는 아래와 같다.

  1. 생성자를 이용해 그리드백 레이아웃을 만든다.
  2. 컨테이너의 레이아웃 매니저를 그리드백 레이아웃으로 설정한다.
  3. 그리드백 콘스트레인트를 만든다.
  4. 그리드백 콘스트레인트의 변수를 원하는 수치로 설정한다.
  5. 그리드백 레이아웃에 컴포넌트와 그리드백 콘스트레인트를 함께 설정한다.
  6. 그리드백 레이에 컴포넌트를 붙인다. 

GridBagConstrains의 멤버필드는 아래와 같다.



  • gridx,gridy : 컴포넌트의 시작위치를 말한다. 최좌측상단 좌표값이 (0,0)이다. 컴포넌트가 끝나는 다음부터 이어서 사용하고 싶을땐,GridBagConstrains.RELATIVE를 사용한다.
  • gridwidth, gridheight : 컴포넌트가 붙여질 행과 열을 지정한다.
    • gridwidth = GridBagConstrains.REMAINDER //행의 마지막에 위치
    • gridheight = GridBagConstrains.REMAINDER //열의 마지막에 위치
    • GridBagConstrain.RELATIVE //행과 열의 마지막 컴포넌트 옆에 위치
  • fill : 컴포넌트의 크기를 늘일때 사용한다.
    • GridBagConstrains.NONE //크기는 변경되지 않는다.
    • GridBagConstrains.HORIZONTAL //가로축으로 늘어난다.
    • GridBagConstrains.VERTICAL //세로축으로 늘어난다.
    • GridBagConstrains.BOTH //가로/세로 방향으로 모두 늘어난다.
  • ipadx, ipady : 컴포넌트(?) 내부의 여백 설정
  • insets : 컴포넌트 바깥쪽 여백을 결정
  • anchor : fill과 반대되는 상황으로 컴포넌트가 컨테이너보다 작을때 어디에 위치시킬지를 결정한다.
    • GridBagConstrains.CENTER //default
    • GridBagConstrains.NORTH
    • GridBagConstrains.NORTHEAST
    • GridBagConstrains.EAST
    • GridBagConstrains.SOUTHEAST
    • GridBagConstrains.SOUTH
    • GridBagConstrains.SOUTHWEST
    • GridBagConstrains.WEST
    • GridBagConstrains.NORTHWEST
  • weightx, weighty : 컴포넌트의 크기가 변경될 때 변경되는 정도를 제어한다. 만약 weightx = 0 ,weighty = 0이라면 컴포넌트의 크기는 변경되지 않고, 다른 값들이 주어진다면 그 값에 비례해서 변화된다.  

Reference:최종명 외 2인,프로그래머를 위한 JAVA2 4E,홍릉출판사

SimpleGridBag.java



  1. import java.awt.*;
  2. import javax.swing.*;
  3. public class SimpleGridBag extends JFrame{
  4.     JButton b1,b2,b3,b4,b5,b6;
  5.    
  6.     public SimpleGridBag(){
  7.        
  8.         super("Simple GridBag");
  9.         GridBagLayout gridbag = new GridBagLayout();
  10.         getContentPane().setLayout(gridbag);
  11.        
  12.         GridBagConstraints constraint = new GridBagConstraints();
  13.        
  14.         constraint.fill=GridBagConstraints.BOTH;
  15.         constraint.weightx = 1.0;
  16.         constraint.weighty = 1.0;
  17.         b1 = new JButton("Button1");
  18.         gridbag.setConstraints(b1, constraint);
  19.         getContentPane().add(b1);
  20.        
  21.         //b1의 constraint과 동일하게 적용
  22.         b2 = new JButton("Button2");
  23.         gridbag.setConstraints(b2, constraint);
  24.         getContentPane().add(b2);
  25.        
  26.         //남은여백 모두 사용 remainder
  27.         constraint.gridwidth = GridBagConstraints.REMAINDER;
  28.         b3 = new JButton("Button3");
  29.         gridbag.setConstraints(b3, constraint);
  30.         getContentPane().add(b3);
  31.        
  32.         //시작위치 지정
  33.         constraint.gridwidth = 1;
  34.         constraint.gridheight = 2;
  35.         b4 = new JButton("Button4");
  36.         gridbag.setConstraints(b4, constraint);
  37.         getContentPane().add(b4);
  38.        
  39.         //가로방향 남은여백 모두 활용
  40.         constraint.gridwidth = GridBagConstraints.REMAINDER;
  41.         constraint.gridheight = 1;
  42.         constraint.weighty = 1;
  43.         b5= new JButton("Button5");
  44.         gridbag.setConstraints(b5, constraint);
  45.         getContentPane().add(b5);
  46.        
  47.         //b5와 같은 constraint설정 유지
  48.         b6 = new JButton("Button6");
  49.         gridbag.setConstraints(b6, constraint);
  50.         getContentPane().add(b6);
  51.        
  52.        
  53.        
  54.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  55.         setSize(400,200);
  56.         setVisible(true);
  57.        
  58.     }
  59.     public static void main(String args[]){
  60.         new SimpleGridBag();
  61.     }
  62. }



댓글

이 블로그의 인기 게시물

[Win32 API] WINAPI - 함수호출규약

JAVA Frame Icon setting

JAVA Spinner