JLabel in GridLayout

grid-layout, java, layout-manager, swing

Solution

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.

Problem

How to add `JLabel` out of the `GridLayout`? I have an 8x8 grid layout. ``` Container content = getContentPane(); content.setLayout(new GridLayout(8, 8,2,2)); for (int f = 0; f < btnArr.length; f++){ for (int s = 0; s < btnArr.length; s++){ btnArr[f][s] = new JButton(); btnArr[f][s].addActionListener(this); content.add(btnArr[f][s]); btnArr[f][s].setBackground(randomColor()); } } ```

Original source

Related problems