To świetny przykład jak nie warto układać kodu ręcznie.
Działający kod o właściwościach dokładnie takich jakie opisałeś wygenerowałem w 20 sekund przy pomocy Netbeans. Być może te same właściwości da się osiągnąć prostszym layoutManagerem, ale skoro do dyspozycji jest automat, to po co?
Przykładzik poniżej ma ustawione ramki na panelach, żeby było widać ich rozmiary. Można je sobie w rzeczywistym kodzie usunąć.
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JPanel;
import javax.swing.LayoutStyle.ComponentPlacement;
public class NewJPanel extends JPanel
{
/** Creates new form NewJPanel */
public NewJPanel()
{
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents()
{
jPanel1 = new JPanel();
jPanel2 = new JPanel();
jPanel3 = new JPanel();
setName("Form"); // NOI18N
jPanel1.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
jPanel1.setName("jPanel1"); // NOI18N
GroupLayout jPanel1Layout = new GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(Alignment.LEADING).addGap(0, 185,
Short.MAX_VALUE));
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(Alignment.LEADING).addGap(0, 134,
Short.MAX_VALUE));
jPanel2.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
jPanel2.setName("jPanel2"); // NOI18N
GroupLayout jPanel2Layout = new GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(Alignment.LEADING).addGap(0, 185,
Short.MAX_VALUE));
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(Alignment.LEADING).addGap(0, 134,
Short.MAX_VALUE));
jPanel3.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0)));
jPanel3.setName("jPanel3"); // NOI18N
GroupLayout jPanel3Layout = new GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(Alignment.LEADING).addGap(0, 378,
Short.MAX_VALUE));
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(Alignment.LEADING).addGap(0, 134,
Short.MAX_VALUE));
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(Alignment.LEADING).addGroup(
Alignment.TRAILING, layout.createSequentialGroup().addContainerGap().
addGroup(
layout.createParallelGroup(Alignment.TRAILING).addComponent(jPanel3,
GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).
addGroup(Alignment.LEADING, layout.createSequentialGroup().
addComponent(jPanel1, GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addPreferredGap(
ComponentPlacement.RELATED).addComponent(jPanel2,
GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))).
addContainerGap()));
layout.setVerticalGroup(
layout.createParallelGroup(Alignment.LEADING).addGroup(layout.
createSequentialGroup().addContainerGap().addGroup(layout.
createParallelGroup(Alignment.LEADING).addComponent(jPanel2,
GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).
addComponent(jPanel1, GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)).addPreferredGap(
ComponentPlacement.RELATED).addComponent(jPanel3,
GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).
addContainerGap()));
}// </editor-fold>
// Variables declaration - do not modify
private JPanel jPanel1;
private JPanel jPanel2;
private JPanel jPanel3;
// End of variables declaration
}