我在一本资料上,看到这样一句话:向JFrame中添加组件时,必先取得ContentPane,然后再使用add()方法把组件添加到此ContentPane中。
而我写的这个小程序却可以运行。是书上说的有问题,还是怎么了,我有点搞不明白。import javax.swing.*;
import java.awt.*;public class JTrameTest {
public static void main(String[]args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
MyTest frame=new MyTest();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class MyTest extends JFrame
{
private Button but;
private JLabel lab;
public MyTest()
{
setTitle("MyTest");
setSize(200,200);
but=new Button("确定");
lab=new JLabel("取消");
add(but,BorderLayout.SOUTH);
add(lab,BorderLayout.NORTH);
}

}

解决方案 »

  1.   

    JFrame的构造方法中,直接使用add添加组件和先取得ContentPane,然后再使用add()添加组件是一样的
      

  2.   

    如果你在JFrame1向JFrame2中添加组件,你必须先得到JFrame2的ContentPane,然后向ContentPane中添加
      

  3.   


    那下面这个程序,该怎么解释,import java.awt.*;
    import javax.swing.*;
    public class c1_4 {
    public c1_4()
    {
    JFrame f=new JFrame();
    Button button=new Button("dkfd");
    JLabel lab=new JLabel("dfdfjljlj");
    f.add(button,BorderLayout.NORTH);
    f.add(lab,BorderLayout.SOUTH);
    f.pack();
    f.setSize(300,300);
    f.setVisible(true);
    }
    public static void main(String[]args)
    {
    new c1_4();
    }}
      

  4.   

    add(but,BorderLayout.SOUTH)和getContentPane().add(lab,BorderLayout.NORTH)都对
    getContentPane() 是为了创建容器,
    有点像你看电视领导喝茶吧,喝茶下面还那个盘子,盘子上面才是茶杯子,那个盘子可要可不要。
    世界上没有绝对的事情,你多调试下就行,只要编译没有问题,能出结果就是对的!
      

  5.   

    这些都是一样的。
    你可以直接用JFrame f=new JFrame() 再用f.add();
    刚才那个类继承了JFrame所以也可以直接用add();
    当然你也也可以先得到该窗体的容器 Container t=this.getContentPane();再用t.add();
      

  6.   

    JFrame继承了Container,Container就是ContentPane(),所以可以用JFrame直接调add
      

  7.   

    JFrame本身就是一个Container容器,搂主的代码是正确的阿,可以运行的
    没看出代码有什么问题