我认为 LayeredPane 是你最好的选择。您将需要第三个面板来包含 A 和 B。这第三个面板将是 layeredPane,然后面板 A 和 B 仍然可以有一个不错的 LayoutManagers。您所要做的就是使 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 的边界。