🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
问题描述
利用链表结构存储学生姓名、宿舍、班级、专业四个信息,student类存储信息,ListNode类为结点,StudentLinkedList类为存储一个个学生的链表,CreatList类在每次录入一个学生的信息创建一个student类,将StudentLinkedList设置为静态,所以每次录入时都存进该链表里录入界面可以进入,点确认confirm键录入清除文本框内容功能不能实现,以及查询功能附在文本框里显示内容实现不了。
public class Student {
String name;
String Dept;
String Major;
String Class;
public Student(String name, String Dept, String Major,String Class) {
this.name = name;
this.Dept = Dept;
this.Major= Major;
this.Class= Class;
}
public void setname(String name) {
this.name=name;
}
public String returnname() {
return name;
}
public void setDept(String Dept) {
this.Dept=Dept;
}
public String returnDept() {
return Dept;
}
public void setMajor(String Major) {
this.Major=Major;
}
public String returnMajor() {
return Major;
}
public void setClass(String Class) {
this.Class=Class;
}
public String returnClass() {
return Class;
}
}
public class ListNode {
Student student;
ListNode next;
public ListNode(Student student) {
this.student = student;
this.next = null;
}
}
public class StudentLinkedList {
protected ListNode head;
public StudentLinkedList() {
this.head = null;
}
// 向链表添加学生对象的方法
public void addStudent(Student student) {
ListNode newNode = new ListNode(student);
if (head == null) {
head = newNode;
}
else {
ListNode current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}
public ListNode returnHead() {
return(this.head);
}
}
public class CreateList {
public static StudentLinkedList StudentList; // 作为成员变量
public CreateList(String n, String d, String m, String c) {
Student student = new Student(n, d, m, c);
StudentList = new StudentLinkedList(); // 初始化成员变量
StudentList.addStudent(student);
}
}
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class ManagerWindow extends JFrame{
private CreateList list;
public JTextField jte;
public ManagerWindow(){
Container cp=this.getContentPane();
JPanel p1=new JPanel(new GridLayout(2,1,5,5));
JLabel jl=new JLabel("学生学籍管理系统");
setLayout(new BorderLayout());
cp.add(BorderLayout.NORTH,p1);
p1.add(jl);
jl.setHorizontalAlignment(SwingConstants.CENTER);
JMenuBar mb = new JMenuBar();
JMenu InputMenu=new JMenu ();
JMenuItem menu1=new JMenuItem ("学生信息录入");
mb.add(menu1);
JMenu InqueMenu=new JMenu ();
JMenuItem menu2=new JMenuItem ("学生信息查询");
mb.add(menu2);
p1.add(mb);
JPanel p4=new JPanel(new GridLayout(3,1,10,10));
JPanel p2=new JPanel(new FlowLayout(FlowLayout.LEFT));
jte=new JTextField(15);
JPanel p3=new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton Input=new JButton("录入");
JButton Ique=new JButton("查询姓名");
p2.add(jte);
p2.add(p3);
p3.add(Ique);
p3.add(Input);
JPanel jp2=new JPanel(new GridLayout(2,4,5,3));
cp.add(BorderLayout.CENTER,jp2);
JLabel lName1=new JLabel("姓名");
JLabel lDept1 = new JLabel("宿舍");
JLabel lMajor1 = new JLabel("专业");
JLabel lClass1= new JLabel("班级");
jp2.add(lName1);
jp2.add(lDept1);
jp2.add(lMajor1);
jp2.add(lClass1);
JTextField tname1=new JTextField(15);
JTextField tDept1=new JTextField(15);
JTextField tMajor1=new JTextField(15);
JTextField tClass1=new JTextField(15);
jp2.add(tname1);
jp2.add(tDept1);
jp2.add(tMajor1);
jp2.add(tClass1);
p4.add(p2);
p4.add(p3);
p4.add(jp2);
cp.add(BorderLayout.CENTER,p4);
Input.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JDialog dialog=new JDialog(ManagerWindow.this,"学生录入",true);
dialog.setLayout(new GridLayout(5,1,5,5));
JLabel lName=new JLabel("姓名");
JTextField tname=new JTextField(15);
JLabel lDept = new JLabel("宿舍");
JTextField tDept=new JTextField(15);
JLabel lMajor = new JLabel("专业");
JTextField tMajor=new JTextField(15);
JLabel lClass = new JLabel("班级");
JTextField tClass=new JTextField(15);
JPanel pname=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel pDept=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel pMajor=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel pClass=new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel pButton=new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton Confirm=new JButton("确认");
pButton.add(Confirm);
pname.add(lName);
pname.add(tname);
pDept.add(lDept);
pDept.add(tDept);
pMajor.add(lMajor);
pMajor.add(tMajor);
pClass.add(lClass);
pClass.add(tClass);
dialog.add(pname);
dialog.add(pDept);
dialog.add(pMajor);
dialog.add(pClass);
dialog.add(pButton);
dialog.setVisible(true);
dialog.setSize(300,400);
Confirm.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String n=tname.getText();
String d=tDept.getText();
String m=tMajor.getText();
String c=tClass.getText();
tname.setText("");
tDept.setText("");
tMajor.setText("");
tClass.setText("");
}
});
Ique.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String stname=jte.getText();
ListNode head=list.StudentList.returnHead();
if(head.student.returnname().equals(stname)) {
tname1.setText(stname);
}
else {
ListNode current=head.next;
while(current.next!=null && current.student.returnname().equals(stname)) {
current=current.next;
tname1.setText(stname);
}
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,500);
setVisible(true);
}
public static void main(String args[]) {
new ManagerWindow();
}
如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。
解决方案
如下是上述问题的解决方案,仅供参考:
在您提供的Java Swing应用程序中,存在几个问题需要解决:
-
确认键无法清除文本框内容:
在Confirm
按钮的ActionListener
中,您需要确保在设置文本框内容为空之前,先获取到用户输入的信息,并使用CreateList
类将新的Student
对象添加到链表中。 -
查询功能无法实现:
查询功能需要遍历链表,检查每个Student
对象的姓名是否与查询条件匹配,并相应地更新UI。
以下是修改后的代码示例:
// ... [您的其他代码] ...
Confirm.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String n = tname.getText();
String d = tDept.getText();
String m = tMajor.getText();
String c = tClass.getText();
// 创建新的Student对象并添加到链表
if (!n.isEmpty() && !d.isEmpty() && !m.isEmpty() && !c.isEmpty()) {
CreateList studentInfo = new CreateList(n, d, m, c);
tname.setText("");
tDept.setText("");
tMajor.setText("");
tClass.setText("");
}
}
});
// ... [您的其他代码] ...
Ique.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String stname = jte.getText();
Student foundStudent = searchStudentByName(stname);
if (foundStudent != null) {
tname1.setText(foundStudent.returnname());
tDept1.setText(foundStudent.returnDept());
tMajor1.setText(foundStudent.returnMajor());
tClass1.setText(foundStudent.returnClass());
} else {
JOptionPane.showMessageDialog(ManagerWindow.this, "未找到学生:" + stname, "查询结果", JOptionPane.INFORMATION_MESSAGE);
}
}
});
// ... [您的其他代码] ...
// 新增搜索学生的方法
public Student searchStudentByName(String name) {
ListNode current = StudentList.returnHead();
while (current != null) {
if (current.student.returnname().equals(name)) {
return current.student;
}
current = current.next;
}
return null;
}
// ... [您的其他代码] ...
public class CreateList {
public static StudentLinkedList StudentList; // 作为静态成员变量
public CreateList(String n, String d, String m, String c) {
Student student = new Student(n, d, m, c);
if (StudentList == null) {
StudentList = new StudentLinkedList(); // 初始化静态成员变量
}
StudentList.addStudent(student);
}
}
// ... [您的其他代码] ...
请注意,我在CreateList
类中添加了一个静态初始化块,以确保StudentList
在第一次使用时被正确初始化。同时,我添加了一个名为searchStudentByName
的方法来搜索具有指定姓名的学生,并在查询按钮的事件监听器中使用这个方法。
此外,我修改了查询功能,使其在找到学生时填充所有文本字段,在未找到时显示一个对话框。
这些更改应该解决您提到的两个问题。如果还有其他问题或需要进一步的帮助,请随时告诉我。
希望如上措施及解决方案能够帮到有需要的你。
PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。
若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。
☀️写在最后
ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解答》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。
码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。