What are the differences between GridLayout and GridBagLayout in Java?
GridLayout将所有组件放置在一个矩形网格中,并分成相等大小的矩形,每个组件都放置在一个矩形内,而GridBagLayout是一种可灵活布局的管理器,它可以在不使组件大小相同的情况下垂直和水平对齐组件。每个GridBagLayout对象维护一个动态的矩形单元格网格,每个组件占据一个或多个称为Componentdisplayarea的单元格。
网格布局
AGridLayout将组件排列在矩形网格中。它在单元中排列组件,每个单元具有相同的大小。组件放置在列和行中。 GridLayout(int行,int列)采用两个参数,分别是列和行。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import java.awt.*; import javax.swing.*; public class GridLayoutTest{ GridLayoutTest() { JFrame frame = new JFrame("GridLayout Test"); JButton button1, button2, button3, button4; button1 = new JButton("Button 1"); button2 = new JButton("Button 2"); button3 = new JButton("Button 3"); button4 = new JButton("Button 4"); frame.add(button1); frame.add(button2); frame.add(button3); frame.add(button4); frame.setLayout(new GridLayout(2,2)); frame.setSize(300,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { new GridLayoutTest(); } } |
输出量
GridBagLayout
AGridBagLayout扩展了GridLayout的功能。 GridBagLayout将组件放置在网格中的每个单个单元格中,并且还允许该组件跨越多个列或行。为了使用GridBagLayout,我们需要创建一个GridBagConstraints对象并填充适当的属性。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import javax.swing.*; import java.awt.*; public class GridBagLayoutTest extends JFrame { public GridBagLayoutTest() { setTitle("GridBagLayout Test"); setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 5; gbc.gridy = 0; add(new JButton("Button1"), gbc); gbc.gridx = 0; gbc.gridy = 5; add(new JButton("Button2"), gbc); gbc.gridx = 2; gbc.gridy = 4; add(new JButton("Button3"), gbc); } public static void main(String[] args) { GridBagLayoutTest gbcTest = new GridBagLayoutTest(); gbcTest.setSize(300,300); gbcTest.setVisible(true); gbcTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
输出量