我已经在这个代码上工作了几天。我在数据库上的过程工作正常,但它没有填入表中。我一次又一次地浏览代码,但我找不到什么错误...我得到的错误是:JavaNullPointerException和涉及的行是返回notes.length
的代码段。这是我的一段代码:
private Object[][] notes = null;
setUpStatusColumn(noteTable, noteTable.getColumnModel().getColumn(2));
protected JTable createTable(GradesModel gradesModel) {
return new JTable(gradesModel);
}
public void setUpStatusColumn(JTable table, TableColumn statusColumn) {
statusCombo = new JComboBox();
statusCombo.addItem("OTOCLOSED");
statusCombo.addItem("INPROGRESS");
statusCombo.addItem("OPEN");
statusCombo.addItem("CLOSED");
statusColumn.setCellEditor(new DefaultCellEditor(statusCombo));
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setToolTipText("Click to select Note Status");
statusColumn.setCellRenderer(renderer);
}
private class GradesModel extends AbstractTableModel {
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
notes[rowIndex][columnIndex] = aValue;
fireTableCellUpdated(rowIndex, columnIndex);
}
public void addTableModelListener(TableModelListener l) {
}
public void removeTableModelListener(TableModelListener l) {
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0 || columnIndex == 1 || columnIndex == 4 || columnIndex == 5)
return false;
else
return true;
}
public Class<?> getColumnClass(int col) {
switch (col) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
return String.class;
}
throw new AssertionError("invalid column");
}
public int getRowCount() {
return notes.length;
}
public int getColumnCount() {
return 6;
}
public String getColumnName(int col) {
switch (col) {
case 0:
return "ETT Date";
case 1:
return "Control Name";
case 2:
return "Note Status Type";
case 3:
return "Note Log Desc";
case 4:
return "Note Log Date Time";
case 5:
return "Update/Insert";
}
throw new AssertionError("invalid column");
}
public Object getValueAt(int row, int col) {
for (int i = 0; i < 6; i++) {
if (col == i)
return notes[row][col];
}
throw new AssertionError("invalid column");
}
}
public void getTableData() throws Exception {
Vector<AlarmLog> alarmLog = null;
alarmLog = RepositoryHandler.getGlobalRepository().getAlarmLog(
alarmId);
notes = new Object[alarmLog.size() ][5];
java.util.Iterator<AlarmLog> ite = alarmLog.iterator();
int i = 0;
GradesModel myModel=(GradesModel)noteTable.getModel();
while(ite.hasNext()){
AlarmLog aLog = ite.next();
myModel.setValueAt(aLog.getEttDate(), i, 0);
myModel.setValueAt(aLog.getControlName(), i, 1);
myModel.setValueAt(aLog.getAlarmStatusType(), i, 2);
myModel.setValueAt(aLog.getAlarmLogDesc(), i, 3);
myModel.setValueAt(aLog.getAlarmLogDateTime(), i, 4);
myModel.setValueAt(1, i, 5);
i++;
}
// fill table code
noteTable.repaint();
//setModel
}
public void getDataFromTable() {
int columnCount = noteTable.getModel().getColumnCount();
int rowCount = noteTable.getModel().getRowCount();
Object[][] objArray = new Object[rowCount][columnCount];
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < columnCount; j++) {
objArray[i][j] = noteTable.getModel().getValueAt(i, j);
}
}
}
答案 0 :(得分:4)
您错过了向setValueAt()
添加新数据的方法JTable
,应该快速修改您的方法public void getTableData() throws Exception {
1)不要在EDT上运行硬代码和长代码,因为Swing GUI等待所有方法完成
2)我很想使用DefaultTableModel
而不是...,然后你忘记了AbstractTableModel
中的覆盖方法
3)您的AbstractTableModel
必须包含正确的fireXxxXxx
方法,而不是noteTable.repaint();
4)我看到另一个......,但是使用DefaultTableModel
你永远不能解决这个问题,因为这些方法是默认实现的
5)我担心你在运行时用模型重新创建JTable