我一直试图在两个小时内找到这个问题的答案,但找不到合适的答案。
我正在使用NetBeans和JTable
。我需要根据JSpinner
的值动态添加或删除行。
这是NetBeans的不可编辑的代码:
tblPodaci.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
) {
Class[] types = new Class [] {
java.lang.Double.class, java.lang.Double.class, java.lang.Double.class, java.lang.Double.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex]; //this is line 83
}
});
这是我用来设置列数的代码:
void spnKValueChanged(ChangeEvent e){
int k = (int)spnK.getValue();
if(k == tblPodaci.getColumnCount()){
return;
}
if(k < tblPodaci.getColumnCount()){
((DefaultTableModel) tblPodaci.getModel()).setColumnCount(k);
}else{
Object[] data = new Integer[tblPodaci.getRowCount()];
((DefaultTableModel) tblPodaci.getModel()).addColumn(" ", data);
}
}
我隐藏列标题所以我不关心它,我不需要它们。
但是当我尝试添加新行时,此代码会生成ArrayIndexOutOfBoundException
。调用addColumn
后会抛出异常,这是输出(只有前几行):
线程“AWT-EventQueue-0”中的异常 java.lang.ArrayIndexOutOfBoundsException:4 at anova.MainWindow $ 3.getColumnClass(MainWindow.java:83)at javax.swing.JTable.getColumnClass(JTable.java:2697)at javax.swing.JTable.getCellRenderer(JTable.java:5682)at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:683)
为什么会这样?我怎样才能完成我想要的?我真的不想实现我自己的TableModel
(这意味着写错误的锅炉板代码的语气),我已经对摇摆感到失望。
我不是一个真正的GUI人,所以我希望你理解。我相信这个问题的工作答案将有助于成千上万的摇摆人。
希望你有答案。谢谢。