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();
放在构造函数中~~~~
我说的对吗?~~
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
这段代码有时可以放在主方法中
有时有看到放在构造方法中3. 一般来说;构造 如 JLabel之类的东西,我们一般将其作为类成员, 因为你很可能在程序很多方法中要用到,但你当然可以放在任何你想放的地方3.还有就是
是所有的组件对象都作为类成员吗?
又是看到JLabel label=new JLabel();
放在构造函数中~~~~
我说的对吗?~~
1。既然报错说是,OutOfMemoryError,那么,总要让你的程序运行一段时间,产生足够多的垃圾来把内存给充满了,才会报这个错。
2。只是给frame添加一个事件响应,放在这两处,并没有什么区别。
3。当然不是了。这个很随便。没有太大的要求,只不过,你若把JLabel label=new JLabel();放在了构造函数中,在该类的其他方法中,就不能引用该对象了。
数据结构学的不好~~~
不知道你的问题解决了没.我做了一点修改,在自己机器上可以运行了。运行一下看看,不知是否你希望看到的。我想你看不到内容的主要原因是你没有将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(); }
}
很谢谢你啊~~~
不过能说说改的原因吗?
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这句什么意思?~~