
import java.awt.*;
import javax.swing.*;
class SimpleNestedLayout {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
JPanel gui = new JPanel(new BorderLayout(5,5));
int sz = 4;
Container content = new JPanel(new GridLayout(sz, 0, 2, 2));
for (int f=0; f<sz*sz; f++) {
content.add(new JButton());
}
gui.add(content, BorderLayout.CENTER);
Container info = new JPanel(
new FlowLayout(FlowLayout.CENTER, 50, 5));
info.add(new JLabel("Flow"));
info.add(new JLabel("Layout"));
gui.add(info, BorderLayout.PAGE_START);
gui.add(new JLabel("Label"), BorderLayout.LINE_END);
JOptionPane.showMessageDialog(null, gui);
}
};
SwingUtilities.invokeLater(r);
}
}
Notes
- For an 8x8 grid, change
sz to 8.
- If the 'label' mentioned is like the label seen in the GUI, it might go in the outer
BorderLayout where Flow Layout (itself a panel) or Label appear as well as either of two other vacant positions in the outermost gui panel.
- Both
info (FlowLayout) & content (GridLayout) panels can also accept more components as needed.
- Simple examples of other nested layouts.
PlayerGui (31 LOC)

WestPanel (30 LOC) not a great example as it extends JPanel instead of simply keeping an instance, but short.

AmortizationLayout (53 LOC) especially nice as an example as it outlines the parent & child layouts using a titled border.