Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Good question. It took me little to crack it, but I got it. Normally, I would have put setions 1-7 in a top panel, and sections 8-9 in a bottom panel, but I liked the challange of 1 panel with GBL. [bored]</p> <p>The problem is that section 4 (column indexes 4 and 5) is not well-defined for GBL, so section 8 doesn't know how far out to go to cover it's fifth column (index 4) so it then just stops after column index 3.</p> <p>So, I added 2 zero-height spacers in the columns that make up section 4 and it worked. Comment out the 2 lines marked SPACERS to see what I mean:</p> <p><strong>EDIT</strong>: added fix suggested by @SheridanVespo</p> <pre><code>import java.awt.*; import java.awt.event.*; import javax.swing.*; public class GridBagDemo2 implements Runnable { private Color[] colors = {Color.BLACK, Color.BLUE, Color.CYAN, Color.GRAY, Color.GREEN, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.YELLOW}; private JPanel panel; private GridBagConstraints gbc; public static void main(String[] args) { SwingUtilities.invokeLater(new GridBagDemo2()); } public void run() { panel = new JPanel(new GridBagLayout()); gbc = new GridBagConstraints(); add(0,0, 2,2, "1"); add(2,0, 2,1, "2"); add(2,1, 2,1, "3"); add(4,0, 2,2, "4"); add(6,0, 2,1, "5"); add(6,1, 2,1, "6"); add(8,0, 2,2, "7"); add(0,2, 5,1, "8"); add(5,2, 5,1, "9"); // SPACERS: define the 2 columns that is section "4" add(4,3, 1,1, ""); add(5,3, 1,1, ""); JFrame frame = new JFrame("Grig Bag"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); } private void add(int x, int y, int colspan, int rowspan, String name) { gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = colspan; gbc.gridheight = rowspan; gbc.weightx = .1; gbc.weighty = .1; gbc.anchor = GridBagConstraints.CENTER; gbc.fill = GridBagConstraints.BOTH; // using another panel for illustrative purposes only JPanel p = new JPanel(); if (!name.equals("")) { gbc.weightx = 1; // @SheridanVespo fix int index = Integer.parseInt(name); JLabel label = new JLabel("Panel " + name); p.add(label); p.setBackground(colors[index]); panel.add(p, gbc); } else { gbc.weightx = 0.5; // @SheridanVespo fix gbc.weighty = 0; // don't allow the spacer to grow gbc.fill = GridBagConstraints.NONE; panel.add(Box.createHorizontalGlue(), gbc); } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload