FormLayout 은 구성 요소를 열과 행의 그리드에 배치하여 지정된 구성 요소를 여러 열이나 행으로 확장할 수 있습니다.

  1. FormLayout 은 1 기반 열 / 행 인덱스를 사용합니다. 
  2. 모든 열 / 행의 폭 / 높이가 반드시 동일하지는 않습니다.
    "실제" 열 / 행을 간격으로 사용합니다. 따라서 간격 열 / 행을 사용하면 간격에 다른 크기를 줄 수 있다는 이점이 있습니다.
  3. 열 및 행 머리글을 사용하여 열 / 행을 삽입 또는 삭제하고 열 / 행 속성을 변경할 수 있습니다.
    (열 / 행을 추가, 제거하면 간격 열을 자동으로 추가, 제거합니다.)


FormLayout은 다음과 같은 기능을 제공합니다.

  1. 열 / 행의 구성 요소의 기본 정렬
  2. 최소 및 최대 열 너비 또는 행 높이 지정.
  3. 다양한 단위를 지원합니다.
    대화 단위, 픽셀, 포인트, 밀리미터, 센티미터 및 인치. 특히 대화 상자 단위는 화면 해상도에 맞춰 레이아웃을 만드는 데 매우 유용합니다.


// ex.1)
import javax.swing.JFrame;
 
import java.awt.Container;
import javax.swing.JLabel;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;
import com.jgoodies.forms.layout.FormSpecs;
 
public class Ex07 extends JFrame{
    Container c = getContentPane();
             
    public Ex07() {
        c.setLayout(new FormLayout(new ColumnSpec[] {
                FormSpecs.RELATED_GAP_COLSPEC,
                FormSpecs.DEFAULT_COLSPEC,
                FormSpecs.RELATED_GAP_COLSPEC,
                FormSpecs.DEFAULT_COLSPEC,},
            new RowSpec[] {
                FormSpecs.RELATED_GAP_ROWSPEC,
                FormSpecs.DEFAULT_ROWSPEC,
                FormSpecs.RELATED_GAP_ROWSPEC,
                FormSpecs.DEFAULT_ROWSPEC,
                FormSpecs.RELATED_GAP_ROWSPEC,
                FormSpecs.DEFAULT_ROWSPEC,
                FormSpecs.RELATED_GAP_ROWSPEC,
                FormSpecs.DEFAULT_ROWSPEC,
                FormSpecs.RELATED_GAP_ROWSPEC,
                FormSpecs.DEFAULT_ROWSPEC,})
        );
         
        c.add(new JLabel("2행 4열"), "2, 4");
        c.add(new JLabel("4행 10열"), "4, 10");       
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);      
    }
    public static void main(String[] args) {
        new Ex07();
    }
}


다음 그림에서 보이듯 이클립스의 Design 모드에서 확인해 보면 행과 열을 확인할 수 있습니다.


다음은 그림과 같은 레이아웃을 구현해 보겠습니다.

 

// ex.2)
import java.awt.BorderLayout;
 
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
 
public class Ex07 extends JPanel {
    public Ex07() {
      super(new BorderLayout());
   
        DefaultFormBuilder b = new DefaultFormBuilder(new FormLayout(""));
        b.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        b.appendColumn("right:pref");
        b.appendColumn("3dlu");
        b.appendColumn("fill:max(pref; 100px)");
        b.appendColumn("5dlu");
        b.appendColumn("right:pref");
        b.appendColumn("3dlu");
        b.appendColumn("fill:max(pref; 100px)");
 
        b.append("이름:", new JTextField());
 
        b.append("성:", new JTextField());
        b.nextLine();
 
        b.append("결혼:", new JCheckBox());
        b.nextLine();
 
        b.append("전화번호:", new JTextField());
        b.nextLine();
 
        b.append("팩스:", new JTextField());
        b.nextLine();
 
        b.append("이메일:", new JTextField());
        b.nextLine();
 
        b.appendSeparator("직업");
 
        b.append("회사:", new JTextField());
        b.nextLine();
 
        b.append("전화번호:", new JTextField());
        b.nextLine();
 
        b.append("팩스:", new JTextField());
        b.nextLine();
 
        add(b.getPanel());
    }
 
 
    public static void main(String[] a){
      JFrame f = new JFrame("Form Layout 샘플");
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.add(new Ex07());
      f.pack();
      f.setVisible(true);
    }
}

소스 출처: http://www.java2s.com/Code/Java/Swing-Components/FormLayoutDefaultFormBuilderExample1.htm

0 댓글