Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

LayoutManager คืออะไร และมีกี่ประเภทใน Java

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();
    }
}

ผลลัพธ์

LayoutManager คืออะไร และมีกี่ประเภทใน Java