【发布时间】:2016-11-13 17:29:59
【问题描述】:
我无法制作包含哈希图而不是多维数组的 JTable。我正在使用我自己的自定义表类并在构造函数上出错。这是该类的代码:
import javax.swing.table.DefaultTableModel;
import java.util.HashMap;
public class CustomTable extends DefaultTableModel {
private String[] columnNames;
private HashMap<Integer, Object[]> newData;
public CustomTable(HashMap<Integer, Object[]> newData, String[] columnNames) {
this.newData = newData;
this.columnNames = columnNames;
}
public int getColumnCount() { return columnNames.length; }
public int getRowCount() { return newData.size(); }
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
Object[] rowData = newData.get(row);
return rowData[col];
}
public void setValueAt(Object value, int row, int col) {
Object[] rowData = newData.get(row);
rowData[col] = value;
fireTableCellUpdated(row, col);
}
public void removeRow(int row) {
newData.remove(row);
fireTableRowsDeleted(row, row);
}
}
这是错误:
Exception in thread "main" java.lang.NullPointerException
at CustomTable.getRowCount(CustomTable.java:21)
at javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.java:224)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:124)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:106)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:86)
at CustomTable.<init>(CustomTable.java:9)
at ControlPanelUI.setupTable(ControlPanelUI.java:22)
at ControlPanelUI.createRightCP(ControlPanelUI.java:106)
at MovieStore.<init>(MovieStore.java:33)
at MovieStore.main(MovieStore.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
【问题讨论】:
-
错误是什么?
-
分享错误信息!
-
(不是问题,而是:您
removeRow不会重新编号。您分配this.newData两次。newData字段可能应该是final。您可能希望将可变数据复制到构造函数(并检查null)。哦,检查键是否与行号匹配。) -
更新的帖子包含错误信息。 @jatDevta
-
如果这不是重复的,请编辑您的问题以包含一个minimal reproducible example,它显示您基于此example 修改的方法。