多次元配列の代わりにハッシュマップを組み込んだJTableを作るのに問題があります。私は自分のカスタムテーブルクラスを使用して、コンストラクタでエラーを取得しています。ここではそのクラスのコードは次のとおりです。JTableのHashMap
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'を2回割り当てます 'newData'フィールドはおそらく' final'です。コンストラクタ内の変更可能なデータをコピーしてああ、キーが行番号と一致していることを確認してください) –