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);
    
}
}

解决方案 »

  1.   

    答:
    问题1:this.setLayout(null);//这句话就是告诉虚拟机你要自己动手布局,所以摆在哪里(位置)或是块头要多大(大小)当然就得你自己来定义了.问题2:你不断地往桶里放东西,放满时你还能看见底下的东西吗?
    另一个比喻:吃饭时放桌布.你是先放盘子再盖桌布,还是反过来放?
      

  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也是这样).关于虚拟机内部还没深入,如果哪位大大知道的话,请多指教了.