帮忙看看这个程序怎么了?解决立即给分~~~~~~

clnara921 2004-08-11 07:00:17
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();


JPanel Manage =new JPanel(); //顶层面板

class Student
{
int SNumber=0,Score=0;
}
Student st[]=new Student[10]; //设所能处理的成绩个数为10
int i;


public Demo5()
{
//建立单选面板
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));




//建立顶层面板

Manage.setLayout(new FlowLayout());
Manage.add(PRadio);
Manage.add(tabbedPane);



frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.getContentPane().add(new Demo5());
frame.pack();
frame.setVisible(true);
}


public static void main(String args[])
{
Demo5 demo=new Demo5();

}
}
------------------------------------------------------------

D:\chengji>javac Demo5.java

D:\chengji>java Demo5
Exception in thread "main" java.lang.OutOfMemoryError
<<no stack trace available>>
Exception occurred during event dispatching:
java.lang.OutOfMemoryError
<<no stack trace available>>
1.运行了有十几秒才出现这个错误,怎么回事?
2.frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
这段代码有时可以放在主方法中
有时有看到放在构造方法中
二种有什么区别?
3.还有就是
是所有的组件对象都作为类成员吗?
又是看到JLabel label=new JLabel();
放在构造函数中~~~~
我说的对吗?~~

谢谢~~


...全文
113 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
clnara921 2004-08-12
  • 打赏
  • 举报
回复
楼上啊
很谢谢你啊~~~
不过能说说改的原因吗?
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
这句什么意思?~~
yxlleslie 2004-08-12
  • 打赏
  • 举报
回复
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();

}
}
weimenren 2004-08-11
  • 打赏
  • 举报
回复
你应该

frame.getContentPane().add(new Demo5());

换成

this.getContentPane().add(frame);

递归的意思是:

自己调用自己,一般需要有终止递归的条件
clnara921 2004-08-11
  • 打赏
  • 举报
回复
还有就是都通过了
可是界面里什么也没有啊~~~
clnara921 2004-08-11
  • 打赏
  • 举报
回复
frame.getContentPane().add(new Demo5());

你递归的new Demo5(),能不溢出吗?

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

你递归的new Demo5(),能不溢出吗?

1、建议你看看 JAVA编程规范 http://dev.csdn.net/article/29/29660.shtm

2. 放在什么地方不重要,重要的是你理解这段代码,并保证代码会执行。 你可以尝试看放在main和放在构件器中的执行顺序

frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
这段代码有时可以放在主方法中
有时有看到放在构造方法中

3. 一般来说;构造 如 JLabel之类的东西,我们一般将其作为类成员, 因为你很可能在程序很多方法中要用到,但你当然可以放在任何你想放的地方

3.还有就是
是所有的组件对象都作为类成员吗?
又是看到JLabel label=new JLabel();
放在构造函数中~~~~
我说的对吗?~~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧