Guidance required..
Would like to achieve something like the image below whereby the child panel stays the same size but contains up to 4 components. I realize I can achieve this by changing the number of columns in my gridlayout below but in order to keep the child panel the same size I would have to change the border sizes which is something I don't mind doing but it seems a bit cumbersome and am wondering if there is a smart way to go about this. The code I have provided is based on sample code provided to me here
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
public class DynamicGridLayout {
private JPanel ui = null;
DynamicGridLayout() {
initUI();
}
public final void initUI() {
if (ui!=null) return;
ui = new JPanel(new GridBagLayout());
ui.setBorder(new TitledBorder("Parent Panel"));
JPanel controls = new JPanel(new GridLayout(2,0,10,10));
ui.add(controls);
controls.setBackground(Color.RED);
controls.setBorder(new TitledBorder("Child Panel"));
for (int ii=1; ii<5; ii++) {
addLabel(controls, "String " + ii);
}
}
public JComponent getUI() {
return ui;
}
private void addLabel(JPanel panel, String text) {
JPanel controls1 = new JPanel(new GridLayout(3,0,3,3));
controls1.setBackground(Color.green);
controls1.setBorder(new EmptyBorder(75,75,75,75));
panel.add(controls1);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
JFrame f = new JFrame("Three Button/Text Field Combo");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
DynamicGridLayout dgl = new DynamicGridLayout();
f.setContentPane(dgl.getUI());
f.setSize(1050, 720);
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}