CN1002
CN1002

Reputation: 1115

Which Layout Manager Should I use to achieve the following?

I have a JFrame and three JPanels. On the frame I used BorderLayout. At the CENTER of the frame I have put outerPanel. On my outerPanel I have used MigLayout. The two other panels are added on to the outerPanel. These two panels are of equal size and their widths add up to the width of the outerPanel - I wanted the outerPanel to be divided into two halves. Below is the code for this:

public class ControlPanel extends JFrame {

// components

public JPanel outerPanel;
public JPanel innerPanel1;
public JPanel innerPanel2;

public ControlPanel() {
    this.createUI();
}

public void createUI() {
    // form properties
    this.setSize(new java.awt.Dimension(300, 300));
    this.setVisible(true);
    this.setLayout(new java.awt.BorderLayout());

    this.outerPanel = new JPanel();
    this.outerPanel.setPreferredSize(new java.awt.Dimension(260, 250));
    this.outerPanel.setLayout(new net.miginfocom.swing.MigLayout());
    this.outerPanel.setBorder(BorderFactory.createEtchedBorder());

    this.add(new javax.swing.JLabel("North"), BorderLayout.NORTH);
    this.add(this.outerPanel, BorderLayout.CENTER);

    this.innerPanel1 = new JPanel();
    this.innerPanel1.setPreferredSize(new java.awt.Dimension(130, 150));
    this.innerPanel1.setLayout(new net.miginfocom.swing.MigLayout());
    this.innerPanel1.setBorder(BorderFactory.createTitledBorder("Panel1"));

    this.innerPanel2 = new JPanel();
    this.innerPanel2.setPreferredSize(new java.awt.Dimension(130, 150));
    this.innerPanel2.setLayout(new net.miginfocom.swing.MigLayout());
    this.innerPanel2.setBorder(BorderFactory.createTitledBorder("Panel2"));

    this.outerPanel.add(this.innerPanel1);
    this.outerPanel.add(this.innerPanel2);
    this.pack();

    }

public static void main(String[] args) {

    ControlPanel cp = new ControlPanel();
  }
}

Problem: When I run my program, the GUI that appears before I resize the window is fine; but when I resize the window -enlarging it, innerPane1 and innerPanel2 remains of the same size without resizing to occupy the space available.

Question: How do we make the two panels , innerPannel1 and innerPanel2, resize at the same time with the window so that they can share equally the available space? Any particular Layout Manager that can be used to divide a panel into two equal halves that can resize at the same time with the window?

Images Showing the output.

  1. Before resizing - the GUI looks well and the panels have correct size.

enter image description here

  1. After resizing -the GUI is distorted and the panels doesn't change size.

enter image description here

Upvotes: 2

Views: 134

Answers (1)

aioobe
aioobe

Reputation: 420951

I suggest you use new GridLayout(1, 2). This will split the panel in 1 row and 2 (equally sized) columns.

So, simply changing

this.outerPanel = new JPanel();

to

this.outerPanel = new JPanel(new GridLayout(1, 2));

should do.

Upvotes: 4

Related Questions