无法显示 Arraylist n JTable 的内容

Can not display contents of Arraylist n JTable

我想不通(过去 2-3 小时一直在努力解决这个问题)。 我想显示 arraylist 的内容,但它们没有出现在 table 中,而且也没有错误,它们根本就没有出现。这是我的代码:

private class examinations{
private int id;
private int candidate_id;
private String date;
private String exam;
private String examNumber;

public examinations(int id, int student_id, String date, String exam, String examNumber) {
    this.id = id;
    this.student_id = student_id;
    this.date = date;
    this.exam= exam;
    this.examNumber= examNumber;
}

public ArrayList ListExams(){
    ArrayList<exams> list = new ArrayList<exams>();

    return list;
}

public void addRollToTable(){
    DefaultTableModel model = (DefaultTableModel)tableExams.getModel();
    ArrayList<exams> list = ListExams();
    Object rowData[] = new Object[5];
    for(int i = 0; i < list.size(); i++) {
        rowData[0] = list.get(i).id;
        rowData[1] = list.get(i).student_id;
        rowData[2] = list.get(i).date;
        rowData[3] = list.get(i).exam;
        rowData[4] = list.get(i).examNumber;

        model.addRow(rowData);
    }
}

} 我测试了这个循环,其他列表中的变量都在那里,所以 System.out.println(list.get(i).exam); 将显示我输入的正确内容。但是 table 不会显示我在 rowData 中添加的任何内容。它再次给出了没有错误。让我向您展示 DefaultTableModel 代码。此代码在我的 class...

private void initComponents()
    Object [][] data = {};
    String[] columnNames = {"Id", "Student_Id", "Date", "Exam", 
    "Exam_number"};
    tableExams= new javax.swing.JTable();

    DefaultTableModel model = new DefaultTableModel(data, columnNames);
    tableExams.setModel(model);
    tableExams.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
    jScrollPane4.setViewportView(tableExams);

我一直在读这个:DefaultTableModel Class Overview但我仍然找不到我哪里出错了...有人可以给点提示吗?

首先学习和使用Java命名约定:

  1. 类名应该以大写字符开头。你能告诉我 JDK 中没有的 class 吗?

  2. 方法不应以大写字符开头。再一次,你能告诉我 JDK 中的方法吗?

以身作则,不要自作主张。

so a System.out.println(list.get(i).exam); will display the correct thing i typed

我不知道这怎么可能。您的代码如下:

a) 首先,您从“listExams() 方法中检索 ArrayList。

ArrayList<exams> list = ListExams();

b) 但在 "listExams()" 方法中,您所做的只是创建一个空的 ArrayList。

ArrayList<exams> list = new ArrayList<exams>();

所以您缺少实际将数据添加到 ArrayList 的逻辑。

根据提供的逻辑,您甚至不需要 ArrayList。只需从 Examination class 中取出数据并将其添加到 TableModel:

Object rowData[] = new Object[5];
rowData[0] = id;
rowData[1] = student_id;
rowData[2] = date;
rowData[3] = exam;
rowData[4] = examNumber;
model.addRow(rowData);

对于不同的解决方案,您可以创建一个自定义 TableModel 来保存您的 "Examination" 对象。查看 Row Table Model 以了解如何完成此操作的分步示例。

好的,我解决了,虽然这只是一个变通方法,但我会接受它。

我所做的只是使用 this.setVisible(false) 然后在另一个 JFrame 中输入信息。单击添加,我创建了第一个 JFrame 的对象,传递了所有变量,使用了 this.dispose(),然后调用 .setVisible(true) 到 return 到显示信息的 table。大声笑,这是一个漫长的测试和重新编写代码,以真正意识到它是那么小的东西......

抱歉,我不知道真正的问题出在哪里,是的,非常感谢那里的简单建议 camickr。我在同一个 JFrame 中尝试了它并且它起作用了,然后我在 2 个 JFrame 之间尝试了它并且我意识到带有 table 的 JFrame 没有更新 table。 repaint() 也没有用。你确实用那个小技巧帮助了我,这就是我所需要的。谢谢!!!!!!