java
JAVA - FormLayout 이란?
FormLayout 은 구성 요소를 열과 행의 그리드에 배치하여 지정된 구성 요소를 여러 열이나 행으로 확장할 수 있습니다.
- FormLayout 은 1 기반 열 / 행 인덱스를 사용합니다.
- 모든 열 / 행의 폭 / 높이가 반드시 동일하지는 않습니다.
"실제" 열 / 행을 간격으로 사용합니다. 따라서 간격 열 / 행을 사용하면 간격에 다른 크기를 줄 수 있다는 이점이 있습니다. - 열 및 행 머리글을 사용하여 열 / 행을 삽입 또는 삭제하고 열 / 행 속성을 변경할 수 있습니다.
(열 / 행을 추가, 제거하면 간격 열을 자동으로 추가, 제거합니다.)
FormLayout은 다음과 같은 기능을 제공합니다.
- 열 / 행의 구성 요소의 기본 정렬
- 최소 및 최대 열 너비 또는 행 높이 지정.
- 다양한 단위를 지원합니다.
대화 단위, 픽셀, 포인트, 밀리미터, 센티미터 및 인치. 특히 대화 상자 단위는 화면 해상도에 맞춰 레이아웃을 만드는 데 매우 유용합니다.
// 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 댓글