我认为LayeredPane是你最好的赌注。你将需要一个第三个面板,虽然包含A和B.这第三个面板将是layeredPane,然后面板A和B仍然可以有一个不错的LayoutManager。所有你需要做的是中心B在A上,有很多例子在Swing线索如何做到这一点。
Tutorial for positioning without a 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的边界。