这是我的JDilog表单的源代码(当我输入按钮时)。我已经从SystemManagement
类创建了一个对象,这是一个管理(我也写了这个类的一部分)。当用户使用addStudent()
课程中的SystemManagement
方法添加她/他的信息时,我将她/他的信息添加到学生列表中,但是当我写作时
System.out.println(management.getField());
它将返回null!为什么呢?
private void submit() {
String name = nameField.getText();
String family = familyField.getText();
String ye = (String) yearComboBox.getSelectedItem();
String ci = (String) cityComboBox.getSelectedItem();
String fi = (String) fieldComboBox.getSelectedItem();
if (ye == null) {
JOptionPane.showMessageDialog(this, "You haven't chosen the year of entrance", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
if (ci == null) {
JOptionPane.showMessageDialog(this, "You have not set the city", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
if (fi == null) {
JOptionPane.showMessageDialog(this, " You have not set the field", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
if (name.equals("")) {
JOptionPane.showMessageDialog(this, "You have not set your name ", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
if (family.equals("")) {
JOptionPane.showMessageDialog(this, " You have not set the family", "Error ", JOptionPane.ERROR_MESSAGE);
return;
}
management.addStudent(name, family, ye,ci, fi);
System.out.println(management.getField());
JOptionPane.showMessageDialog(this, management.toString(), " registered successefully", JOptionPane.INFORMATION_MESSAGE);
clear();
}
public class SystemManagement implements Serializable {
private String siteName;
private List<Fields> fields;
private List<Professors> professors;
private List<Students> students;
private List<Lessons> lessons;
public Professors pro;
public Lessons les;
public SystemManagement(String siteName) {
this.siteName = siteName;
professors = new ArrayList<Professors>();
students = new ArrayList<Students>();
lessons = new ArrayList<Lessons>();
fields = new ArrayList<Fields>();
}
public List<Fields> getFields() {
return fields;
}
public void setField(String field) {
this.field = field;
}
public String getField() {
return field;
}
public void addStudent(String name, String family, String yearOfEntrance, String city, String field) {
Students student = new Students(name, family, yearOfEntrance, city, field);
students.add(student);
}
答案 0 :(得分:1)
使用提供的管理类的其他源代码,getField()方法将始终返回一个空的ArrayList。如果您调用addStudent,新学生将被添加到学生列表中,但不会修改字段ArrayList(基于给定的代码)。因此,getField方法将始终返回空结果。
答案 1 :(得分:0)
我没有在SystemManagement类中看到getField()方法
答案 2 :(得分:0)
您应该增加一致性 - 与您要使用getField()和setField(String字段)访问的值相关的List结构的内容是否与用于创建Student的字段参数相关?
现在你的代码不能编译,除非你定义了一个类成员'String field'。
如果您想获得刚刚使用submit方法设置的字段值,那么您必须从Student获取它。这是现在的问题 - 最简单的解决方法:
Student added = management.addStudent(name, family, ye,ci, fi);
System.out.println(added.getField());
假设学生拥有字段值的getter,并且在管理类中:
public Student addStudent(String name, String family, String yearOfEntrance, String city, String field) {
Students student = new Students(name, family, yearOfEntrance, city, field);
students.add(student);
return student;
}
但你仍然需要解决'Field'问题(如上所述的一致性)
答案 3 :(得分:0)
但是当我写
时
System.out.println(management.getField());
它将返回null!为什么?的
因为您尚未为field
属性设置值。
不知何故,你设法搞砸了代码。您发布的内容虽然有趣,但不包含field
属性的任何引用,也不显示为其分配值的位置。
最接近的是addStudent
方法
public void addStudent(String name, String family, String yearOfEntrance, String city, String field) {
Students student = new Students(name, family, yearOfEntrance, city, field);
students.add(student);
}
但是,这不会将值设置为field
属性。
要解决您的问题,请搜索field
属性,并找出您在哪里设置值。
搜索字符串:
field =
正在执行的方法是:
public String getField() {
return field;
}
返回null
的唯一方式是field
null 。搜索分配,您可以找到答案。
答案 4 :(得分:0)
找出错误的最简单方法是在IDE的调试器中以调试模式运行代码,并按照程序流程检查变量,错误应该变得很明显。
有一些关于使用Eclipse调试器here的优秀视频教程,但即使您不使用Eclipse,一般概念都是相关的。
答案 5 :(得分:0)
一些可能有帮助的一般性评论。
您似乎有一个getField()和一个getFields()方法。一个可能是为了返回你的字段列表,但我不确定你期望对方返回什么。您想要特定学生的特定领域吗?在这种情况下,您需要将某种参数传递给方法(例如学生姓名),然后您可以找到要返回的特定字段。
使用addStudent()方法添加学生时,您还需要保持其余列表的最新状态。如果要维护所有字段的主列表,则需要在添加新学生时添加(如果需要 - 不需要添加任何重复项)。
我希望以上内容有所帮助。