我正在为我正在做的分级系统项目使用摆动 GUI。我最初发现一个关于从 中删除 Student 对象的 NPE 问题DefaultListModel
,我想我找到了源。我运行了两个测试,一个在控制器类中,另一个在视图中。
DefaultListModel<Student> model = new DefaultListModel(); //declarations in Controller
private TreeMap<String, Student> tm = new TreeMap();
现在,当我使用 JButton 添加学生时,我运行了以下测试以确保将学生添加到 TreeMap 和 ListModel。
private void handleAddButton(){
fn = sv.firstName(); //return firstName from textArea
ln = sv.lastName(); //return lastName from textArea
Student s = new Student(ln, fn);
model.addElement(s);
tm.put(Student.makeStudentKey(fn, ln), s);
String grades = sv.getGrades(); //returns string of grades from textField
sc = new Scanner(grades);
while(sc.hasNext()){
s.addGrade(sc.nextDouble()); //add grades to Student's grades ArrayList
}
sv.clearField();//clear textFields and area
sv.setId(); //set NextID to be displayed in respective textField
debug();
}
调试方法:
public void debug(){
System.out.println(tm.size());
for(Student s : tm.values()){
System.out.println(s);
}
System.out.println(model.size());
}
现在,在给定 1 个学生“测试测试”的 handleAddButton 类中运行时,debug
打印 1, student toString, 1。这是在 View 类中运行调试的方法,处理菜单项以创建新文件。
private void NewActionPerformed(java.awt.event.ActionEvent evt) {
int check = JOptionPane.showConfirmDialog(null, "Are you sure you want"
+ " to create a new file?", "New File", JOptionPane.YES_NO_OPTION);
System.out.println(check);
sc.debug();
if(check == 0){
sc.clearModel();
sc.clearTm();
sc.setListModel();
}
当对一个学生进行相同的测试时,它返回 0 0,就好像没有添加任何学生一样。sv
已初始化,我只是无法理解为什么会发生这种情况,它使我无法删除对象以及清除模型