gpt4 book ai didi

java - 数据库数据没有填入 JTable

转载 作者:行者123 更新时间:2023-11-29 03:51:41 25 4
gpt4 key购买 nike

几天来我一直在研究这段代码。我在数据库上的程序工作正常,但它没有填入表中。我一次又一次地检查代码,但找不到问题所在...我得到的错误是: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);
}
}
}

最佳答案

您错过了用于将新数据添加到 JTable 的方法 setValueAt(),应该快速修改您的方法 public void getTableData() throws Exception {

1) 不要在 EDT 上运行硬而长的代码,因为 Swing GUI 等待所有方法完成

2) 我建议改用 DefaultTableModel...,然后您忘记了 AbstractTableModel

中的覆盖方法

3) 您的 AbstractTableModel 必须包含适当的 fireXxxXxx 方法而不是 noteTable.repaint();

4) 我看到另一个......,但是通过使用 DefaultTableModel 你永远无法解决这个问题,因为这些方法是默认实现的

5) 恐怕你会在运行时用它的模型重新创建 JTable

关于java - 数据库数据没有填入 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com