GridBagLayout เป็นตัวจัดการเลย์เอาต์ที่ยืดหยุ่นมาก ซึ่งช่วยให้เราจัดตำแหน่งส่วนประกอบให้สัมพันธ์กันโดยใช้ข้อจำกัด . แต่ละ GridBagLayout ใช้ตารางเซลล์สี่เหลี่ยมแบบไดนามิกโดยแต่ละองค์ประกอบครอบครองเซลล์อย่างน้อยหนึ่งเซลล์ที่เรียกว่าพื้นที่แสดงผล แต่ละองค์ประกอบจัดการโดย GridBagLayout เชื่อมโยงกับ GridBagConstraints อินสแตนซ์ที่ระบุวิธีการจัดวางองค์ประกอบภายในพื้นที่แสดงผล
ข้อจำกัดของ GridBag
เราสามารถปรับแต่ง GridBagConstraints อ็อบเจ็กต์โดยการตั้งค่าตัวแปรอินสแตนซ์สาธารณะอย่างน้อยหนึ่งตัว ตัวแปรเหล่านี้ระบุองค์ประกอบ ตำแหน่ง ขนาด ปัจจัยการเติบโต จุดยึด สิ่งที่ใส่เข้าไป การเติม และช่องว่างภายใน .
- gridx :ค่า int ที่ระบุเซลล์ด้านซ้ายสุดที่คอมโพเนนต์นั้นครอบครอง gridx ระบุคอลัมน์ที่จะวางส่วนประกอบ
- กรีดี้ :ค่า int ที่ระบุเซลล์บนสุดที่คอมโพเนนต์นั้นครอบครอง gridy ระบุแถวที่จะวาง
- ความสูงของตาราง :ค่า int ที่ระบุจำนวนเซลล์แนวตั้งที่คอมโพเนนต์ครอบครอง
- ตารางความกว้าง :ค่า int ที่ระบุจำนวนเซลล์แนวนอนที่คอมโพเนนต์ครอบครอง
- ipadx :ค่า int ที่ระบุจำนวนของช่องว่างภายในแนวนอนภายในที่จะเพิ่มให้กับแต่ละตัวควบคุม
- ipady :ค่า int ที่ระบุจำนวนของช่องว่างภายในแนวตั้งที่จะเพิ่มให้กับตัวควบคุมแต่ละตัว
- สิ่งที่ใส่เข้าไป :ออบเจ็กต์ Insets ที่ระบุจำนวนพื้นที่ว่างที่จะทิ้งไว้ในแต่ละด้านของเซลล์
- น้ำหนักx :ค่าสองเท่าที่ระบุวิธีการกระจายพื้นที่ในแนวนอนเพิ่มเติม หากเลย์เอาต์ที่ได้มีขนาดเล็กกว่าพื้นที่ที่กำหนดในแนวนอน
- หนักมาก :ค่าสองเท่าที่ระบุวิธีการกระจายพื้นที่ในแนวตั้งเพิ่มเติม หากเลย์เอาต์ที่ได้มีขนาดเล็กกว่าพื้นที่ที่กำหนดในแนวตั้ง
- สมอ :ค่า int ที่ระบุการจัดตำแหน่งของส่วนประกอบภายในเซลล์
- เติม :ค่า int ที่ระบุว่าจะทำอย่างไรกับการเว้นวรรคส่วนเกินในเซลล์
- สัมพันธ์กัน :สำหรับฟิลด์ gridx และ gridy ฟิลด์นี้ระบุว่าส่วนประกอบจะถูกวางไว้ถัดจากส่วนประกอบที่เพิ่มล่าสุด สำหรับฟิลด์ gridwidth และ gridheight ฟิลด์นี้ระบุว่าคอมโพเนนต์จะเป็นส่วนประกอบที่อยู่ถัดจากรายการสุดท้ายในแถวหรือคอลัมน์
- ส่วนที่เหลือ :สำหรับฟิลด์ gridwidth และ gridheight ฟิลด์นี้ระบุว่าส่วนประกอบเป็นส่วนประกอบสุดท้ายในแถวหรือคอลัมน์
ตัวอย่าง
<ก่อนหน้า>นำเข้า java.awt.*; นำเข้า javax.swing.*; คลาสสาธารณะ GridBagLayoutTest { โมฆะสาธารณะหลัก (สตริง [] a) { กรอบ JFrame =ใหม่ JFrame ("การทดสอบ GridBagLayout"); คอนเทนเนอร์ myPane =frame.getContentPane (); myPane.setLayout(ใหม่ GridBagLayout()); GridBagConstraints c =ใหม่ GridBagConstraints(); setMyConstraints(c,0,0,GridBagConstraints.CENTER); myPane.add(getFieldPanel(),c); setMyConstraints(c,0,1,GridBagConstraints.CENTER); myPane.add(getButtonPanel(),c); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize (300, 250); frame.setLocationRelativeTo(null); frame.setVisible(จริง); } JPanel คงที่ส่วนตัว getFieldPanel () { JPanel p =JPanel ใหม่ (ใหม่ GridBagLayout ()); p.setBorder(BorderFactory.createTitledBorder("รายละเอียด")); GridBagConstraints c =GridBagConstraints ใหม่ (); setMyConstraints(c,0,0,GridBagConstraints.EAST); p.add(ใหม่ JLabel("ชื่อ:"),c); setMyConstraints(c,1,0,GridBagConstraints.WEST); p.add(ใหม่ JTextField(16),c); setMyConstraints(c,0,1,GridBagConstraints.EAST); p.add(ใหม่ JLabel("ระบบ:"),c); setMyConstraints(c,1,1,GridBagConstraints.WEST); p.add(getSystemPanel(),c); setMyConstraints(c,0,2,GridBagConstraints.EAST); p.add(ใหม่ JLabel("ภาษา:"),c); setMyConstraints(c,1,2,GridBagConstraints.WEST); p.add(getLanguagePanel(),c); setMyConstraints(c,0,3,GridBagConstraints.EAST); p.add(ใหม่ JLabel("Year:"),c); setMyConstraints(c,1,3,GridBagConstraints.WEST); p.add(ใหม่ JComboBox(สตริงใหม่[] {"2019","2020","2021"}),c); กลับ p; } JPanel คงที่ส่วนตัว getButtonPanel () { JPanel p =JPanel ใหม่ (ใหม่ GridBagLayout ()); p.add(ใหม่ JButton("ตกลง")); p.add(ใหม่ JButton("ยกเลิก")); กลับ p; } JPanel getSystemPanel แบบคงที่ส่วนตัว () { JRadioButton winButton =JRadioButton ใหม่ ("Windows" จริง); JRadioButton macButton =JRadioButton ใหม่ ("Mac", เท็จ); ButtonGroup systemGroup =ใหม่ ButtonGroup (); systemGroup.add (winButton); systemGroup.add (macButton); JPanel p =JPanel ใหม่ (ใหม่ GridBagLayout ()); p.add(winButton); p.add(macButton); กลับ p; } JPanel คงที่ส่วนตัว getLanguagePanel () { JPanel p =JPanel ใหม่ (ใหม่ GridBagLayout ()); p.add(ใหม่ JCheckBox("Java",จริง)); p.add(ใหม่ JCheckBox("Python",จริง)); p.add(ใหม่ JCheckBox("จุดประกาย",เท็จ)); กลับ p; } โมฆะส่วนตัว setMyConstraints (GridBagConstraints c, int gridx, int gridy, int anchor) { c.gridx =gridx; c.gridy =กริด; c.anchor =สมอ; }}ผลลัพธ์