GridBagLayout不起作用

this.rootComponent.setLayout(new GridBagLayout()); GridBagConstraints gbc=new GridBagConstraints(); //gbc.gridwidth=2; gbc.gridx=0; gbc.gridy=0; gbc.gridwidth=8; gbc.anchor=GridBagConstraints.FIRST_LINE_START; this.rootComponent.add(new JLabel("Test label 1"),gbc); gbc.gridx=8; gbc.gridy=12; gbc.gridwidth=GridBagConstraints.REMAINDER; gbc.anchor=GridBagConstraints.FIRST_LINE_START; this.rootComponent.add(new JLabel("Test label"),gbc); 

想要像这样格式化。 灰色部分显示jpanel部分。 最初我想正确布局前2个jpanel。 这是行不通的。 怎么解决?

在此处输入图像描述

您未能为GridBagConstraints指定任何weightxweighty值。 此外,您的gridwidth值是错误的,因为对于最底部的JPanel ,它只需要为2 ,其余的则需要为1


解释我在做什么:考虑JPanelBLUERED ,它们将沿X-AXIS放置,比例为70:30 ,相对于彼此(因此它们的weightx x将分别为0.70.3 。沿X-AXIS的总面积为1.0 )。

现在,这两个BLUERED JPanel都将沿着Y-AXIS放置,相对于第三个GREEN JPanel ,比例为90:10 ,因此,这些BLUERED都将具有weighty = 0.9GREEN JPanel将具有weighty = 0.1 ,但由于GREEN JPanel假设占据整个区域(相对于X-AXIS ),因此由BLUERED JPanel占用,就此而言,其gridwidth = 2weightx = 1.0


试试这个代码示例:

 import java.awt.*; import javax.swing.*; public class GridBagLayoutExample { private GridBagConstraints gbc; public GridBagLayoutExample() { gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.FIRST_LINE_START; } private void displayGUI() { JFrame frame = new JFrame("GridBagLayout Example"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JPanel contentPane = getPanel(Color.WHITE); contentPane.setLayout(new GridBagLayout()); JPanel leftPanel = getPanel(Color.BLUE); JPanel rightPanel = getPanel(Color.RED); JPanel bottomPanel = getPanel(Color.GREEN.darker()); addComp(contentPane, leftPanel , 0, 0, 0.7, 0.9, 1, 1, GridBagConstraints.BOTH); addComp(contentPane, rightPanel , 1, 0, 0.3, 0.9, 1, 1, GridBagConstraints.BOTH); addComp(contentPane, bottomPanel , 0, 1, 1.0, 0.1, 2, 1, GridBagConstraints.BOTH); frame.setContentPane(contentPane); //frame.pack(); frame.setSize(300, 300); frame.setLocationByPlatform(true); frame.setVisible(true); } private void addComp(JPanel panel, JComponent comp , int gridX, int gridY , double weightX, double weightY , int gridWidth, int gridHeight, int fill) { gbc.gridx = gridX; gbc.gridy = gridY; gbc.weightx = weightX; gbc.weighty = weightY; gbc.gridwidth = gridWidth; gbc.gridheight = gridHeight; gbc.fill = fill; panel.add(comp, gbc); } private JPanel getPanel(Color backColour) { JPanel panel = new JPanel(); panel.setOpaque(true); panel.setBackground(backColour); panel.setBorder( BorderFactory.createEmptyBorder(5, 5, 5, 5)); return panel; } public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { new GridBagLayoutExample().displayGUI(); } }; EventQueue.invokeLater(runnable); } } 

这是相同的输出:

GridBagLayoutExample