import java.awt.*;
import javax.swing.*;
public class D extends JApplet {public void init() {
Container c=getContentPane();
FlowLayout flow=new FlowLayout();
flow.setAlignment(FlowLayout.LEFT);
flow.setHgap(20);
flow.setVgap(40);
c.setLayout(flow);
c.add(new Button("OK"));//去掉c.变成add(new Button("OK"))为什么在小程序里就没有按钮了?
for(int i=1;i<=12;i++)
{
c.add(new Button("i am "+i));
}
setBackground(Color.BLUE);
setVisible(true);
}
}

解决方案 »

  1.   

    如果去掉c,那么你的button是加到japplet上了
    实际上JApplet是swing中的,而Button是awt中的,两者有点区别。getContentPane()是从javax.swing.RootPaneContainer中来的
    里面的文档里有说:
    This interface serves as a er for Swing GUI builders that need to treat components like JFrame, that contain a single JRootPane, specially. For example in a GUI builder, dropping a component on a RootPaneContainer would be interpreted as frame.getContentPane().add(child). 
      

  2.   

    button是在容器中显示的,c就是实例化的容器。去掉c.后button没有了容器,也就无法显示了
      

  3.   

    啊????那去掉c.变成add(new Button("OK"))会不会影响下面的按钮的添加?
      

  4.   

    去掉了c.编译器就不知道要把这个按钮加载到哪里去了,所以不会显示,信息置回存放在java的堆内存中,等待一个引用去调用
      

  5.   

    import java.awt.*;
    import javax.swing.*;
    public class D extends JApplet {public void init() {
    Container c=getContentPane();
    FlowLayout flow=new FlowLayout();
    flow.setAlignment(FlowLayout.LEFT);
    flow.setHgap(20);
    flow.setVgap(40);
    c.setLayout(flow);
    add(new Button("OK"));
    for(int i=1;i<=12;i++)
    {
    c.add(new Button("i am "+i));
    }
    setBackground(Color.BLUE);
    setVisible(true);
    }
    }
    为什么这个程序的窗口中没有按钮?
      

  6.   

    这边调用add()方法的时候所有的加不加C.都没关系。这边不加C.表明直接把button加到applet上面。其实这边的C是通过Container c=getContentPane();这句得到的。因为在程序中并没有用到其他的容器所以这边的C其实指的也是本程序继承的applet。至于为什么会看不到一些button应该是applet查看器或者Html页面设定的宽度不够。
    以下是我写的html页面,可以看到全部的Button。所以程序中所有C.有没有都无所谓的。
    <html>
    <head>
    <title>test</title>
    </head>
    <body>
    <applet code="D.class" width="600" height="600">
    </applet>
    </body>
    </html>