• Window, JWindow : BorderLayout
• Frame, JFrame : BorderLayout
• Dialog, JDialog : BorderLayout
• Panel, JPanel : FlowLayout
• Applet, JApplet : FlowLayout
• Container.setLayout(LayoutManager lm)
-> lm을 새로운 배치관리자로 설정
// JWindow에 FlowLayout로 설정
JWindow jw = new JWindow();
jw.setLayout(mew FlowLayout());
// 컨텐트팬의 배치관리자를 FlowLayout으로 변경
Container c = frame.getContentPane();
c.setLayout(new FlowLayout());
• 컴포넌트를 왼쪽에서 오른쪽으로 배치
• 그 후, 위에서 아래로 컴포넌트를 배치
• 컨테이너 크기 변경 시 컴포넌트를 재배치
import javax.swing.*;
import java.awt.*;
public class LayoutManagerEx extends JFrame {
public LayoutManagerEx() {
super("FlowLayout 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setBackground(Color.YELLOW);
contentPane.setLayout(new FlowLayout());
contentPane.add(new JButton("1"));
contentPane.add(new JButton("2"));
contentPane.add(new JButton("3"));
contentPane.add(new JButton("4"));
contentPane.add(new JButton("5"));
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
LayoutManagerEx frame = new LayoutManagerEx();
}
}
• 실행 결과
컨테이너 크기 변경 시
• 컨테이너의 공간을 5개로 분할, 배치
-> East, West, Center, South, North
• 배치 방법 : add(Component comp, int index)
• 컨테이너 크기 변경 시, 재배치
import javax.swing.*;
import java.awt.*;
public class LayoutManagerEx extends JFrame {
public LayoutManagerEx() {
super("BorderLayout 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setBackground(Color.YELLOW);
contentPane.setLayout(new BorderLayout());
contentPane.add(new JButton("1"), BorderLayout.NORTH);
contentPane.add(new JButton("2"), BorderLayout.WEST);
contentPane.add(new JButton("3"), BorderLayout.SOUTH);
contentPane.add(new JButton("4"), BorderLayout.EAST);
contentPane.add(new JButton("5"), BorderLayout.CENTER);
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
LayoutManagerEx frame = new LayoutManagerEx();
}
}
• 실행 결과
컨테이너 크기 변경 시
• 동일한 그리드(격자)로 분할하고 각 셀에 컴포넌트를 배치
• 그리드는 생성자에 행과 열의 수를 지정
• 컨테이너 크기 변경 시, 재배치
import javax.swing.*;
import java.awt.*;
public class LayoutManagerEx extends JFrame {
public LayoutManagerEx() {
super("GridLayout 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setBackground(Color.YELLOW);
// 행의 수 : 4, 열의 수 : 3
// 수직 간격 : 5px, 수평 간격 5px로 설정
contentPane.setLayout(new GridLayout(4, 3, 5, 5));
contentPane.add(new JButton("1"));
contentPane.add(new JButton("2"));
contentPane.add(new JButton("3"));
contentPane.add(new JButton("4"));
contentPane.add(new JButton("5"));
contentPane.add(new JButton("6"));
contentPane.add(new JButton("7"));
contentPane.add(new JButton("8"));
contentPane.add(new JButton("9"));
contentPane.add(new JButton("*"));
contentPane.add(new JButton("0"));
contentPane.add(new JButton("#"));
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
LayoutManagerEx frame = new LayoutManagerEx();
}
}
• 실행 결과
**컨테이너 크기 변경 시
• 컴포넌트의 절대 크기가와 절대 위치를 결정
-> 컨테이너 크기를 변경하더라도 재배치 x
• 컴포넌트의 위치 또는 크기를 임의로 설정하고자 할 경우 사용
• 컴포넌트를 겹쳐서 출력하고자 하는 경우 사용
import javax.swing.*;
import java.awt.*;
public class LayoutManagerEx extends JFrame {
public LayoutManagerEx() {
super("Null Container 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(null);
JLabel jLabel = new JLabel("Null Layout Manager!!");
jLabel.setSize(200, 20);
jLabel.setLocation(100, 20);
// 컨테이너에 jLabel 추가
contentPane.add(jLabel);
for(int i=0; i<10; i++) {
// for문을 사용하여 버튼을 생성
JButton jButton = new JButton(Integer.toString(i));
jButton.setLocation(i*30, 50);
jButton.setSize(60, 30);
// 컨테이너에 jButton 추가
contentPane.add(jButton);
}
setSize(330, 150);
setVisible(true);
}
public static void main(String[] args) {
LayoutManagerEx frame = new LayoutManagerEx();
}
}
• 실행 결과
컨테이너 크기 변경 시