无法显示 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命名约定:
类名应该以大写字符开头。你能告诉我 JDK 中没有的 class 吗?
方法不应以大写字符开头。再一次,你能告诉我 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()
也没有用。你确实用那个小技巧帮助了我,这就是我所需要的。谢谢!!!!!!
我想不通(过去 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命名约定:
类名应该以大写字符开头。你能告诉我 JDK 中没有的 class 吗?
方法不应以大写字符开头。再一次,你能告诉我 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()
也没有用。你确实用那个小技巧帮助了我,这就是我所需要的。谢谢!!!!!!