Java 摆动重叠组件

Java 摆动重叠组件,java,swing,layout,Java,Swing,Layout,我在一个框架中有两个AWT组件,面板a和面板B。我希望面板a的大小与框架的高度和宽度一致(并在调整框架大小时保持该大小),但我希望面板B与a重叠。B将位于固定位置(0,0,使其更容易),具有固定的高度和宽度。我不确定我需要什么样的布局管理器来完成这项工作。如果我使用空布局,我想我必须自己管理面板a的大小调整,但这会使面板B的大小调整相对容易。你有没有想过如何做到这一点 谢谢, 杰夫也许我遗漏了什么。如果B是固定尺寸,并且在(0,0)处,而A是全宽的,那么让B重叠A有什么用?你永远看不到任何放在B

我在一个框架中有两个AWT组件,面板a和面板B。我希望面板a的大小与框架的高度和宽度一致(并在调整框架大小时保持该大小),但我希望面板B与a重叠。B将位于固定位置(0,0,使其更容易),具有固定的高度和宽度。我不确定我需要什么样的布局管理器来完成这项工作。如果我使用空布局,我想我必须自己管理面板a的大小调整,但这会使面板B的大小调整相对容易。你有没有想过如何做到这一点

谢谢,
杰夫

也许我遗漏了什么。如果B是固定尺寸,并且在(0,0)处,而A是全宽的,那么让B重叠A有什么用?你永远看不到任何放在B下面的东西

我想不出任何默认布局管理器,但Oriely有一个可以使用的: (请参阅源代码链接)使用。我已经很久没有使用它了,但它应该比自己管理布局要好得多。

看看

编辑:

如果panelA是AWT组件,您将很难使panelB重叠。来自Sun的文章,题为:

不要在容器内混合轻型(Swing)和重型(AWT)组件,因为轻量组件预计会与重型组件重叠

但是,如果您希望让panelA完全填充框架,为什么不将panelB添加为panelA的一个组件

编辑2:

如果可以使panelB成为重量级组件,则可以使用
JLayeredPane

下面是一个快速模型,演示了如何:

public static void main(String[] args){
    new GUITest();
}

public GUITest() {
    frame = new JFrame("test");
    frame.setSize(300,300);
    addStuffToFrame();
    SwingUtilities.invokeLater(new Runnable(){
        public void run() {
            frame.setVisible(true);
        }
    });

}       

private void addStuffToFrame() {    
    Panel awtPanel = new Panel();
    awtPanel.setBackground(Color.blue);
    //here you can fool around with the pane:
    //first, you can see how the layered pane works by switching the 
    //DEFUALT_LAYER and PALLETTE_LAYER back and forth between the two panels
    //and re-compiling to see the results
    awtPanel.setSize(200,300);
    frame.getLayeredPane().add(awtPanel, JLayeredPane.DEFAULT_LAYER);
    //next you comment out the above two lines and 
    //uncomment the following line. this will give you the desired effect of
    //awtPanel filling in the entire frame, even on a resize. 
    //frame.add(awtPanel);

    Panel awtPanel2 = new Panel();
    awtPanel2.setBackground(Color.red);
    awtPanel2.setSize(300,200);
    frame.getLayeredPane().add(awtPanel2,JLayeredPane.PALETTE_LAYER);
}   

你最好的选择是拥有自己的LayoutManager。最简单的方法可能是扩展或代理BorderLayout,并对布局面板B有一个特定的案例。

你说面板a的宽度应该与框架的宽度匹配-其高度如何?是的,基本上我希望a填充整个框架,包括高度和宽度。我应该提到JPanel a实际上是AWT组件,我的错误。我会编辑这篇文章。我也可以做B AWT,没有问题。问题是PanelA(我无法控制)不是容器,因此它没有add方法。我只想把它们都添加到某个父容器中,但我不确定如何正确地将它们布局,以便A填充整个容器,而B只填充其中的一部分。对不起,我暂时离开了这一点。我会在一段时间内检查这个,如果它有效,我会投票/接受它。谢谢我真的没有想到将JLayeredPane与AWT组件一起使用,但这是可行的,谢谢。最终我将使B不固定,以便它可以移动到不同的位置。在第一关,我只是把它保持在0,0。你是对的,我不会看到B所覆盖的那一部分,但那没关系。屏幕的不动产很昂贵,而B很小,所以我宁愿掩盖a的一小部分,也不愿使用BorderLayout之类的东西,浪费我不会使用的大部分屏幕。