Layout Managers ช่วยควบคุมการจัดวางคอมโพเนนต์ภาพใน GUI Forms โดยกำหนดขนาดและตำแหน่งของคอมโพเนนต์ภายในคอนเทนเนอร์
ประเภทของ LayoutManager
มี Layout Manager ทั้งหมด 6 แบบใน Java
- FlowLayout: จัดเรียงคอมโพเนนต์เหมือนคำบนหน้ากระดาษ เติมจาก ซ้ายไปขวา และบนลงล่าง เรียงตามลำดับที่เพิ่ม คอมโพเนนต์แรกอยู่มุมซ้ายบน หากกว้างไม่พอจะขึ้นบรรทัดใหม่ ควบคุมช่องว่างแนวตั้งและแนวนอนได้ จัดชิด ซ้าย, กลาง, ขวา
- BorderLayout: จัดเรียงตามขอบหรือกลางคอนเทนเนอร์ คือ บน, ล่าง, ขวา, ซ้าย คอมโพเนนต์ที่เพิ่มบน/ล่าง ได้ความสูงตามต้องการ แต่ความกว้างเท่าคอนเทนเนอร์ คอมโพเนนต์ซ้าย/ขวา ได้ความกว้างตามต้องการ ความสูงเท่าพื้นที่เหลือ คอมโพเนนต์กลาง ไม่ได้ความสูง/กว้างตามต้องการ ครอบพื้นที่เหลือ
- GridLayout: จัดเรียงในกริดของ เซลล์ขนาดเท่ากัน เพิ่มจาก ซ้ายไปขวา บนลงล่าง เซลล์ละ 1 คอมโพเนนต์ ทุกโซนขนาดเท่ากัน Resize คอนเทนเนอร์ เซลล์ปรับขนาดอัตโนมัติ ลำดับตามที่เพิ่ม
- GridBagLayout:
- BoxLayout: จัดเรียงหลายคอมโพเนนต์ แนวตั้งหรือแนวนอน แต่ไม่ใช่ทั้งคู่ เรียง ซ้ายไปขวา หรือ บนลงล่าง จัดแนวนอน: ความสูงเท่ากันทุกตัว = ตัวใหญ่สุด จัดแนวตั้ง: ความกว้างเท่ากันทุกตัว = ตัวกว้างสุด
- CardLayout: จัดเรียง 2 คอมโพเนนต์ขึ้นไป ขนาดเท่ากัน เรียงเป็นกอง (deck) เห็นได้แค่การ์ดบนสุด การ์ดแรกที่เพิ่มอยู่บนสุด ช่องว่างเริ่มต้นศูนย์ แสดง แนวนอนหรือแนวตั้ง
ตัวอย่างโค้ด
import java.awt.*;
import javax.swing.*;
public class LayoutManagerTest extends JFrame {
JPanel flowLayoutPanel1, flowLayoutPanel2, gridLayoutPanel1, gridLayoutPanel2, gridLayoutPanel3;
JButton one, two, three, four, five, six;
JLabel bottom, lbl1, lbl2, lbl3;
public LayoutManagerTest() {
setTitle("LayoutManager Test");
setLayout(new BorderLayout()); // ตั้ง BorderLayout ให้ JFrame
flowLayoutPanel1 = new JPanel();
one = new JButton("One");
two = new JButton("Two");
three = new JButton("Three");
flowLayoutPanel1.setLayout(new FlowLayout(FlowLayout.CENTER)); // ตั้ง FlowLayout
flowLayoutPanel1.add(one);
flowLayoutPanel1.add(two);
flowLayoutPanel1.add(three);
flowLayoutPanel2 = new JPanel();
bottom = new JLabel("This is South");
flowLayoutPanel2.setLayout(new FlowLayout(FlowLayout.CENTER));
flowLayoutPanel2.add(bottom);
gridLayoutPanel1 = new JPanel();
gridLayoutPanel2 = new JPanel();
gridLayoutPanel3 = new JPanel();
lbl1 = new JLabel("One");
lbl2 = new JLabel("Two");
lbl3 = new JLabel("Three");
four = new JButton("Four");
five = new JButton("Five");
six = new JButton("Six");
gridLayoutPanel2.setLayout(new GridLayout(1, 3, 5, 5)); // ตั้ง GridLayout
gridLayoutPanel2.add(lbl1);
gridLayoutPanel2.add(lbl2);
gridLayoutPanel2.add(lbl3);
gridLayoutPanel3.setLayout(new GridLayout(3, 1, 5, 5));
gridLayoutPanel3.add(four);
gridLayoutPanel3.add(five);
gridLayoutPanel3.add(six);
gridLayoutPanel1.setLayout(new GridLayout(2, 1));
gridLayoutPanel1.add(gridLayoutPanel2);
gridLayoutPanel1.add(gridLayoutPanel3);
add(flowLayoutPanel1, BorderLayout.NORTH);
add(flowLayoutPanel2, BorderLayout.SOUTH);
add(gridLayoutPanel1, BorderLayout.CENTER);
setSize(400, 325);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
new LayoutManagerTest();
}
}
ผลลัพธ์
