从JTable添加/删除列的正确方法是什么

时间:2014-04-02 18:57:04

标签: java swing jtable indexoutofboundsexception defaulttablemodel

我一直试图在两个小时内找到这个问题的答案,但找不到合适的答案。 我正在使用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人,所以我希望你理解。我相信这个问题的工作答案将有助于成千上万的摇摆人。

希望你有答案。谢谢。

0 个答案:

没有答案