这个问题倒还有趣,试了一下。
一.如果两个Panel是完全重叠,可以尝试使用布局:CardLayout。如下:
importjava.awt.*;
importjava.awt.event.*;
publicclassTestLayout{
Framef;
Panelp,p1,p2;
Buttonbtn;
CardLayoutcal;
publicTestLayout(){
f=newFrame();
p=newPanel();
p1=newPanel();
p1.setBackground(Color.red);
p2=newPanel();
p2.setBackground(Color.green);
btn=newButton(\"切换\");
cal=newCardLayout();
f.setLayout(newBorderLayout());
f.add(btn,BorderLayout.SOUTH);
f.add(p);
p.setLayout(cal);
p.add(p1);
p.add(p2);
f.setSize(300,300);
f.setVisible(true);
//响应关闭
f.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
//用于在p1和p2之间切换
btn.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
cal.previous(p);//或者cal.next(p);可实现在p1,p2之间切换
}
});
}
publicstaticvoidmain(Stringargs[]){
newTestLayout();
}
}
二.部分重叠的情况。用swing的组件来测试,先运行以下程序后,再将程序中://p1.setOpaque(false);这句取消注释后运行。两相对照可得部分重叠的结论。如下:
//TestLayout.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassTestLayout{
JFramef;
Containercon;
JPanelp1,p2;
publicTestLayout(){
f=newJFrame();
con=f.getContentPane();
p1=newJPanel();
p2=newJPanel();
f.setSize(300,300);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
con.setLayout(null);//为实现自定义组件的位置和大小,需设置内容面版的布局为空
p1.setBackground(Color.red);
//p1.setOpaque(false);//设置p1为透明的
p1.setBounds(0,0,300,200);//setBounds(intx,inty,intwidth,intheight)方法中四个参数分别为组件的x,y坐标以及宽width和高height
con.add(p1);
p2.setBackground(Color.green);
p2.setBounds(0,100,300,200);
con.add(p2);
}
publicstaticvoidmain(Stringargs[]){
newTestLayout();
}
} |