Рассмотрите возможность изменения поля заполнения GridBagConstraint на ОБА для панели 2:
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH; // *****
c.anchor = GridBagConstraints.NORTH;
Либо это, либо для гораздо более простого решения, просто используйте вместо него BorderLayout:
panel.setBorder(new LineBorder(Color.RED));
panel.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
panel1.add(new JLabel(" Testing Label 1 "));
panel1.setBorder(new TitledBorder("P1"));
panel.add(panel1, BorderLayout.NORTH);
JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
panel.add(panel2, BorderLayout.CENTER);
JPanel panel3 = new JPanel();
panel3.setBorder(new TitledBorder("P3"));
panel3.setLayout(new GridLayout(5, 1));
for (int i = 0; i < 5; i++) {
panel3.add(new JButton("button " + i));
}
panel.add(panel3, BorderLayout.SOUTH);