无法显示Arraylist n JTable的内容

问题描述 投票:-1回答:2

我无法弄清楚这一点(过去2-3小时一直试图解决这个问题)。我想显示一个arraylist的内容,但它们没有出现在表中,也没有错误,它们根本就没有出现。这是我的代码:

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);会显示我键入的正确内容。但是,表格不会显示我在rowData中添加的内容。它再次没有错误。我来看看DefaultTableModel代码。这段代码在我班级的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 swing arraylist jtable defaulttablemodel
2个回答
1
投票

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

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

通过示例学习,不要自己制定约定。

所以是System.out.println(list.get(i).exam);将显示我键入的正确的东西

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

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

ArrayList<exams> list = ListExams();

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

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

因此,您缺少实际将数据添加到ArrayList的逻辑。

根据提供的逻辑,您甚至不需要ArrayList。只需从Examination类中获取数据并将其添加到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来保存“Exam”对象。查看Row Table Model,了解如何完成此操作的分步示例。


-1
投票

好吧,我解决了它,即使这只是一个解决方法,我会接受它。

我所做的就是使用this.setVisible(false),然后在另一个JFrame中输入信息。单击添加,我创建第一个JFrame的对象,传递所有变量,使用this.dispose()然后调用.setVisible(true)返回到显示信息的表。 LOL是一个长期测试和重写代码,实际上实现它是一个小...

对不起,我不知道实际问题在哪里,并且非常感谢那些简单的建议。我在同一个JFrame中尝试了它并且它工作了,然后我在两个JFrame之间尝试了它并且我意识到具有表DID的JFrame不更新表。 repaint()也没有工作。你真的帮我解决了这个小技巧,这就是我所需要的。谢谢!!!!!!

© www.soinside.com 2019 - 2024. All rights reserved.