Я думаю, LayeredPane - ваш лучший выбор здесь. Вам понадобится третья панель, хотя она будет содержать A и B. Эта третья панель будет слоистой панелью, а затем панель A и B все еще может иметь хорошие LayoutManager. Все, что вам нужно сделать, это центр B над A, и в следе Swing есть немало примеров, как это сделать. Учебник по позиционированию без LayoutManager .
public class Main {
private JFrame frame = new JFrame();
private JLayeredPane lpane = new JLayeredPane();
private JPanel panelBlue = new JPanel();
private JPanel panelGreen = new JPanel();
public Main()
{
frame.setPreferredSize(new Dimension(600, 400));
frame.setLayout(new BorderLayout());
frame.add(lpane, BorderLayout.CENTER);
lpane.setBounds(0, 0, 600, 400);
panelBlue.setBackground(Color.BLUE);
panelBlue.setBounds(0, 0, 600, 400);
panelBlue.setOpaque(true);
panelGreen.setBackground(Color.GREEN);
panelGreen.setBounds(200, 100, 100, 100);
panelGreen.setOpaque(true);
lpane.add(panelBlue, new Integer(0), 0);
lpane.add(panelGreen, new Integer(1), 0);
frame.pack();
frame.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main();
}
}
Вы используете setBounds для размещения панелей внутри многоуровневой панели, а также для установки их размеров.
Изменить, чтобы отразить изменения в исходном сообщении
Вам нужно будет добавить компонентные прослушиватели, которые определяют, когда размер родительского контейнера изменяется, а затем динамически изменять границы панелей A и B.