GridBagBlues #2376234
In the GridBagLayout example that follows, all the panels nest nicely
within the frame with no spare space.
Now change the last three lines of the constructor
from
add(panel5, new GBC(3, 1, 1, GBC.REMAINDER));
//add(panel5, new GBC(3, 1, 1, GBC.RELATIVE));
//add(panel6, new GBC(3, 3, 1, 1));
to
//add(panel5, new GBC(3, 1, 1, GBC.REMAINDER));
add(panel5, new GBC(3, 1, 1, GBC.RELATIVE));
add(panel6, new GBC(3, 3, 1, 1));
Now there is a large blank area at the bottom of the frame. Can anyone
tell me why?
// MyApp9.java
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class MyApp9 extends JPanel {
static final String[] lorem = { "lorem", "ipsum", "dolor", "sit",
"amet", "consectateur", "adipsicing", "elit", "sed",
"do", "euismod", "tempor", "incididunt", "ut", "labore",
"et", "dolore", "magna", "aliqua", "ut", "enim", "ad",
"minim", "veniam", "quis", "nostrud", "exertitation",
"ullamco", "laboris", "nisi", "ut", "aliquip", "ex",
"ea", "commodo", "consequat", "Duis", "aute", "irure",
"dolor", "in", "reprehendrit", "in", "voluptate", "velit",
"esse", "cillum", "dolore", "eu", "fugiat", "nulla",
"pariatur", "Excepteur", "sint", "accaecat", "cupidatat",
"non", "proident", "sunt", "in", "culpa", "qui", "officia",
"deserunt", "mollit" };
MyApp9() {
setBorder(BorderFactory.createLineBorder(Color.RED, 5));
int j = 0;
JPanel panel0 = new JPanel();
panel0.setBorder(BorderFactory.createTitledBorder("Panel 0"));
panel0.setLayout(new BoxLayout(panel0, BoxLayout.LINE_AXIS));
for (int i = 0; i < 4; i++)
panel0.add(new JLabel(lorem[j++]+" "));
JPanel panel1 = new JPanel();
panel1.setBorder(BorderFactory.createTitledBorder("Panel 1"));
panel1.setLayout(new BoxLayout(panel1, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 14; i++)
panel1.add(new JLabel(lorem[j++]));
JPanel panel2 = new JPanel();
panel2.setBorder(BorderFactory.createTitledBorder("Panel 2"));
panel2.setLayout(new BoxLayout(panel2, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 15; i++)
panel2.add(new JLabel(lorem[j++]));
JPanel panel3 = new JPanel();
panel3.setBorder(BorderFactory.createTitledBorder("Panel 3"));
panel3.setLayout(new BoxLayout(panel3, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 2; i++)
panel3.add(new JLabel(lorem[j++]));
JPanel panel4 = new JPanel();
panel4.setBorder(BorderFactory.createTitledBorder("Panel 4"));
panel4.setLayout(new BoxLayout(panel4, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 8; i++)
panel4.add(new JLabel(lorem[j++]));
JPanel panel5 = new JPanel();
panel5.setBorder(BorderFactory.createTitledBorder("Panel 5"));
panel5.setLayout(new BoxLayout(panel5, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 16; i++)
panel5.add(new JLabel(lorem[j++]));
JPanel panel6 = new JPanel();
panel6.setBorder(BorderFactory.createTitledBorder("Panel 6"));
panel6.setLayout(new BoxLayout(panel6, BoxLayout.PAGE_AXIS));
for (int i = 0; i < 2; i++)
panel6.add(new JLabel(lorem[j++]));
setLayout(new GridBagLayout());
add(panel0, new GBC(0, 0, GBC.REMAINDER, 1));
add(panel1, new GBC(0, 1, 1, GBC.REMAINDER));
add(panel2, new GBC(1, 1, 1, GBC.REMAINDER));
add(panel3, new GBC(2, 1, 1, 1));
add(panel4, new GBC(2, 2, 1, GBC.REMAINDER));
add(panel5, new GBC(3, 1, 1, GBC.REMAINDER));
//add(panel5, new GBC(3, 1, 1, GBC.RELATIVE));
//add(panel6, new GBC(3, 3, 1, 1));
} // constructor
class GBC extends GridBagConstraints {
GBC(int x, int y, int width, int height) {
super(x, y, width, height, 0.0, 0.0,
GridBagConstraints.FIRST_LINE_START,
GridBagConstraints.NONE, new Insets(0, 0, 0, 0),
0, 0);
}
}
private static void createAndShowGUI() {
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.out.println("Unable to set L&F");
}
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("MyApp9");
frame.setContentPane(new MyApp9());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}