this.setLayout(null);就是没有任何布局,组件的size和location当然要自己设定
至于第二个问题,你先放画布,就把放按钮的地方覆盖了,按钮当然放不了,你运行下面程序试试:
import java.awt.*;
import java.applet.*;
public class Lll extends Applet
{
Button b1=new Button("按钮1"),b2=new Button("按钮2");
Canvas c=new Canvas();
public void init()
{
this.setLayout(null);
this.setSize(400,400);
c.setSize(300,300);
c.setBackground(Color.red);
b1.setSize(30,15);b1.setLocation(350,315);
b2.setSize(30,15);b2.setLocation(320,315);
add(c);add(b1);add(b2);
}
}
至于第二个问题,你先放画布,就把放按钮的地方覆盖了,按钮当然放不了,你运行下面程序试试:
import java.awt.*;
import java.applet.*;
public class Lll extends Applet
{
Button b1=new Button("按钮1"),b2=new Button("按钮2");
Canvas c=new Canvas();
public void init()
{
this.setLayout(null);
this.setSize(400,400);
c.setSize(300,300);
c.setBackground(Color.red);
b1.setSize(30,15);b1.setLocation(350,315);
b2.setSize(30,15);b2.setLocation(320,315);
add(c);add(b1);add(b2);
}
}
问题1:this.setLayout(null);//这句话就是告诉虚拟机你要自己动手布局,所以摆在哪里(位置)或是块头要多大(大小)当然就得你自己来定义了.问题2:你不断地往桶里放东西,放满时你还能看见底下的东西吗?
另一个比喻:吃饭时放桌布.你是先放盘子再盖桌布,还是反过来放?
Canvas(画布)是一个组件,不是容器.它不等同于Panel(面板),而是和按钮属同一级别;Panel才是一个容器.相当于我所说的桌布.
所以说上面桌布和盘子关系根本不是画布和按钮的关系.如果要实现你那样的效果可以这样:
import java.awt.*;
import java.applet.*;
public class Lll extends Applet
{ Button b1=new Button("按钮1"),b2=new Button("按钮2");
Panel p=new Panel();
public void init()
{
this.setLayout(null);
this.setSize(400,400);
p.setSize(300,300);
p.setBackground(Color.red);
p.add(b1);
p.add(b2);
b1.setSize(30,15);b1.setLocation(150,200);
b2.setSize(30,15);b2.setLocation(200,200);
add(p);
}
}至于用Canvas为什么后加才能显示正确结果这个我就不知了(我试了一下Panel也是这样).关于虚拟机内部还没深入,如果哪位大大知道的话,请多指教了.