0

我正在为我正在做的分级系统项目使用摆动 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已初始化,我只是无法理解为什么会发生这种情况,它使我无法删除对象以及清除模型

4

0 回答 0