frame.getContentPane().add(new Demo5());你递归的new Demo5(),能不溢出吗?1、建议你看看 JAVA编程规范 http://dev.csdn.net/article/29/29660.shtm2. 放在什么地方不重要,重要的是你理解这段代码,并保证代码会执行。 你可以尝试看放在main和放在构件器中的执行顺序frame.addWindowListener(new WindowAdapter()
        {
         public void windowClosing(WindowEvent e)
         {
         System.exit(0);
         }
        });
这段代码有时可以放在主方法中
有时有看到放在构造方法中3. 一般来说;构造 如 JLabel之类的东西,我们一般将其作为类成员, 因为你很可能在程序很多方法中要用到,但你当然可以放在任何你想放的地方3.还有就是
是所有的组件对象都作为类成员吗?
又是看到JLabel label=new JLabel();
放在构造函数中~~~~
我说的对吗?~~

解决方案 »

  1.   

    so 长的代码。
    1。既然报错说是,OutOfMemoryError,那么,总要让你的程序运行一段时间,产生足够多的垃圾来把内存给充满了,才会报这个错。
    2。只是给frame添加一个事件响应,放在这两处,并没有什么区别。
    3。当然不是了。这个很随便。没有太大的要求,只不过,你若把JLabel label=new JLabel();放在了构造函数中,在该类的其他方法中,就不能引用该对象了。
      

  2.   

    frame.getContentPane().add(new Demo5());你递归的new Demo5(),能不溢出吗?你说我不太明白
    数据结构学的不好~~~
      

  3.   

    你应该frame.getContentPane().add(new Demo5());换成this.getContentPane().add(frame);递归的意思是:自己调用自己,一般需要有终止递归的条件
      

  4.   

    clnara921 (娜拉) :
       不知道你的问题解决了没.我做了一点修改,在自己机器上可以运行了。运行一下看看,不知是否你希望看到的。我想你看不到内容的主要原因是你没有将frame的contentpane和控件联系起来.import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Demo5 extends JFrame
    {
            //创建组件的对象
        JFrame frame=new JFrame("成绩管理");
            JPanel PRadio=new JPanel();                             //单选按钮面板
        JRadioButton teacherButton=new JRadioButton("老师");
        JRadioButton studentButton=new JRadioButton("学生");
        JRadioButton manageButton=new JRadioButton("管理员");
        ButtonGroup group=new ButtonGroup();                    //单选按钮组    JTextField TNumberIn=new JTextField(8);            //输入学号框
        JLabel LNumberIn=new JLabel("输入学号:   ");       //输入学号标签
        JButton BIn=new JButton("确认");                   //输入按钮
        JTextField TScoreIn=new JTextField(8);             //成绩输入框
        JLabel LScoreIn=new JLabel("请输入成绩:");         //成绩输入标签
        JTextField TNumberQuery=new JTextField(8);            //学号查询框
        JLabel LNumberQuery=new JLabel("请输入学号:");        //学号查询标签
        JTextField TScoreQuery=new JTextField(8) ;           //成绩查询框
        JLabel LScoreQuery=new JLabel("您的成绩是:");         //成绩查询标签
        JButton BQuery=new JButton("查询");                  //查询按钮    JTextField TNumberUpdate=new JTextField(8) ;          //学号修改框
        JLabel LNumberUpdate=new JLabel("请输入学号:");       //学号修改标签
        JTextField TScoreUpdate=new JTextField(8) ;            //成绩修改框
        JLabel LScoreUpdate=new JLabel("成绩改为:   ");        //成绩修改标签
        JTextField TScoreAgo=new JTextField(8) ;               //原有成绩框
        JLabel LScoreAgo=new JLabel("原有成绩:   ");           //原有成绩标签
        JButton BUpdate =new JButton("确定");                  //修改按钮        JTabbedPane tabbedPane=new JTabbedPane();              //标签面板       JPanel panel1=new JPanel();                           //成绩输入面板
                JPanel Panel11=new JPanel();
                JPanel Panel12=new JPanel();
            JPanel panel2=new JPanel();                           //成绩查询面板
                JPanel Panel21=new JPanel();
                JPanel Panel22=new JPanel();
            JPanel panel3=new JPanel();                           //成绩修改面板
                JPanel Panel31=new JPanel();                       
                       JPanel panel4=new JPanel();
                JPanel Panel32=new JPanel();
                JPanel Panel33=new JPanel(); 
            Container Manage;                     //顶层面板                class Student
                {
                    int SNumber=0,Score=0;
                    
                 }
                    Student st[]=new Student[10];                      //设所能处理的成绩个数为10
                    int i;     
            public Demo5()
            {
                  frame.setSize(new Dimension(400, 300));   
                  //建立单选面板
                    PRadio.setLayout(new GridLayout(1,1));
                    teacherButton.setSelected(true);
                group.add(teacherButton);
                    group.add(studentButton);
                    group.add(manageButton);
                    PRadio.add(teacherButton);
                PRadio.add(studentButton);
                PRadio.add(manageButton);
                PRadio.setBorder(BorderFactory.createEmptyBorder(20,20,20,0));
                //建立标签面板            //建立输入面板
                panel1.setLayout(new BorderLayout());
                        Panel11.setLayout(new FlowLayout());
                        Panel11.add(LNumberIn);
                        Panel11.add(TNumberIn);
                panel1.add(Panel11,BorderLayout.NORTH);
                    Panel12.setLayout(new FlowLayout());
                        Panel12.add(LScoreIn);
                        Panel12.add(TScoreIn);
                panel1.add(Panel12,BorderLayout.CENTER);    
                panel1.add(BIn,BorderLayout.SOUTH);
                tabbedPane.addTab("成绩输入",null,panel1,null);
                tabbedPane.setSelectedIndex(0);//一开始选中"成绩输入"标签面板
                //建立查询面板
                panel2.setLayout(new BorderLayout());
                    Panel21.setLayout(new FlowLayout());
                    Panel21.add(LNumberQuery);
                    Panel21.add(TNumberQuery);
                panel2.add(Panel21,BorderLayout.NORTH);
                    TScoreQuery.setEditable(false);
                    Panel22.setLayout(new FlowLayout());
                    Panel22.add(LScoreQuery);
                    Panel22.add(TScoreQuery);
                panel2.add(Panel22,BorderLayout.CENTER);
                panel2.add(BQuery,BorderLayout.SOUTH);
                tabbedPane.addTab("成绩查询",null,panel2,null);
                //建立修改面板     
                panel3.setLayout(new BorderLayout());
                    Panel31.setLayout(new FlowLayout());
                Panel31.add(LNumberUpdate);
                Panel31.add(TNumberUpdate);
                panel3.add(Panel31,BorderLayout.NORTH);
                panel4.setLayout(new BorderLayout());
                          Panel32.setLayout(new FlowLayout());
                      Panel32.add(LScoreAgo);
                      Panel32.add(TScoreAgo);
                panel4.add(Panel32,BorderLayout.NORTH);
                Panel33.setLayout(new FlowLayout());
                Panel33.add(LScoreUpdate);
                Panel33.add(TScoreUpdate);
                panel4.add(Panel33,BorderLayout.CENTER);
            panel3.add(panel4,BorderLayout.CENTER);
            panel3.add(BUpdate,BorderLayout.SOUTH);        
                tabbedPane.addTab("成绩修改",null,panel3,null);    //  tabbedPane.setLayout(new GridLayout(0,1));  //Get rid of this line, I don't know why too.              frame.addWindowListener(new WindowAdapter()
                   {
                           public void windowClosing(WindowEvent e)
                           {
                                   System.exit(0);
                           }
                   });
              
          /**
            * The following 3 lines is the main difference.
            * */
                   
                   Manage=frame.getContentPane();
                  //建立顶层面板
     
            Manage.setLayout(new BorderLayout());
            Manage.add(PRadio,BorderLayout.NORTH);
           Manage.add(tabbedPane,BorderLayout.CENTER);       
                   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                   frame.setVisible(true);    }    
          public  static void  main(String args[])
          {
                  Demo5 demo=new Demo5();      }
    }
      

  5.   

    楼上啊
    很谢谢你啊~~~
    不过能说说改的原因吗?
                   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    这句什么意思?~~