2016-05-16 131 views
0

My JTable有一列有用于维护状态的JCheckBox。当我没有实现TableModelListener并运行该程序时,数据将显示在JTable中。但是当我使用TableModelListener执行代码时出现错误。 java.lang.ArrayIndexOutOfBoundsException:-1使用TableModelListener从JTable中的数据库检索数据到JTable中时出错

package com.tag.pointOfsale; 

    import java.text.SimpleDateFormat; 
    import java.util.Locale; 
    import javax.swing.JOptionPane; 
    import javax.swing.event.TableModelEvent; 
    import javax.swing.event.TableModelListener; 
    import javax.swing.table.TableModel; 

    public class Return_Goods extends javax.swing.JDialog { 

     PointSaleDao posDao = new PointSaleDao(); 

     public Return_Goods(java.awt.Frame parent, boolean modal) { 
      super(parent, modal); 
      initComponents(); 


     jTable1.getModel().addTableModelListener(new TableModelListener() { 
       @Override 
       public void tableChanged(TableModelEvent e) { 
        int row = e.getFirstRow(); 
        int column = e.getColumn(); 

        String sno = jTable1.getValueAt(jTable1.getSelectedRow(), 0).toString(); 
      String code = jTable1.getValueAt(jTable1.getSelectedRow(), 1).toString(); 
      String pro_name = jTable1.getValueAt(jTable1.getSelectedRow(), 2).toString(); 
      String batch = jTable1.getValueAt(jTable1.getSelectedRow(), 3).toString(); 
      String exp_date = jTable1.getValueAt(jTable1.getSelectedRow(), 4).toString(); 
      String qty = jTable1.getValueAt(jTable1.getSelectedRow(), 5).toString(); 
      String price = jTable1.getValueAt(jTable1.getSelectedRow(), 6).toString(); 
      String total = jTable1.getValueAt(jTable1.getSelectedRow(), 7).toString(); 
      String r_pro = jTable1.getValueAt(jTable1.getSelectedRow(), 8).toString(); 

      if (column == 9) { 
       TableModel model = (TableModel) e.getSource(); 
       String columnName = model.getColumnName(column); 
       Boolean checked = (Boolean) model.getValueAt(row, column); 
       if (checked) { 
        System.out.println(sno + "\t" + code + "\t" + pro_name + "\t" + true); 
       } else { 
        System.out.println(sno + "\t" + code + "\t" + pro_name + "\t" + false); 
         } 
        } 
       } 
      }); 

     } 

     @SuppressWarnings("unchecked") 
     // <editor-fold defaultstate="collapsed" desc="Generated Code">       
     private void initComponents() { 

      jLabel1 = new javax.swing.JLabel(); 
      txtInvoice = new javax.swing.JTextField(); 
      jLabel2 = new javax.swing.JLabel(); 
      txtPurchaseDate = new javax.swing.JTextField(); 
      jLabel3 = new javax.swing.JLabel(); 
      txtPayment = new javax.swing.JTextField(); 
      jLabel4 = new javax.swing.JLabel(); 
      txtSalesman = new javax.swing.JTextField(); 
      jLabel5 = new javax.swing.JLabel(); 
      txtCustomer = new javax.swing.JTextField(); 
      jPanel1 = new javax.swing.JPanel(); 
      jScrollPane1 = new javax.swing.JScrollPane(); 
      jTable1 = new javax.swing.JTable(); 
      btnReturn = new javax.swing.JButton(); 
      jLabel6 = new javax.swing.JLabel(); 
      txtReturn = new javax.swing.JTextField(); 
      jLabel7 = new javax.swing.JLabel(); 
      jScrollPane2 = new javax.swing.JScrollPane(); 
      txtDescription = new javax.swing.JTextArea(); 

      setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 
      setTitle("Return Goods"); 

      jLabel1.setText("Invoice No."); 

      txtInvoice.addFocusListener(new java.awt.event.FocusAdapter() { 
       public void focusLost(java.awt.event.FocusEvent evt) { 
        txtInvoiceFocusLost(evt); 
       } 
      }); 

      jLabel2.setText("Purchase Date : "); 

      jLabel3.setText("Payment Method : "); 

      jLabel4.setText("Salesman : "); 

      jLabel5.setText("Customer Name : "); 

      jTable1.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N 
      jTable1.setModel(new javax.swing.table.DefaultTableModel(
       new Object [][] { 

       }, 
       new String [] { 
        "S no.", "Code", "Name", "Batch No.", "Expiry Date", "Quantity", "Price", "Total Cost", "Return Qty", "Status" 
       } 
      ) { 
       Class[] types = new Class [] { 
        java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class 
       }; 
       boolean[] canEdit = new boolean [] { 
        false, false, false, false, false, false, false, false, true, false 
       }; 

       public Class getColumnClass(int columnIndex) { 
        return types [columnIndex]; 
       } 

       public boolean isCellEditable(int rowIndex, int columnIndex) { 
        return canEdit [columnIndex]; 
       } 
      }); 
      jTable1.setRowHeight(22); 
      jScrollPane1.setViewportView(jTable1); 
      if (jTable1.getColumnModel().getColumnCount() > 0) { 
       jTable1.getColumnModel().getColumn(0).setPreferredWidth(15); 
       jTable1.getColumnModel().getColumn(5).setPreferredWidth(30); 
       jTable1.getColumnModel().getColumn(6).setPreferredWidth(30); 
       jTable1.getColumnModel().getColumn(7).setPreferredWidth(40); 
       jTable1.getColumnModel().getColumn(8).setPreferredWidth(40); 
       jTable1.getColumnModel().getColumn(9).setPreferredWidth(15); 
      } 

      javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
      jPanel1.setLayout(jPanel1Layout); 
      jPanel1Layout.setHorizontalGroup(
       jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jScrollPane1) 
      ); 
      jPanel1Layout.setVerticalGroup(
       jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 
        .addGap(0, 0, Short.MAX_VALUE) 
        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      ); 

      btnReturn.setText("Return"); 
      btnReturn.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent evt) { 
        btnReturnActionPerformed(evt); 
       } 
      }); 

      jLabel6.setText("Returned On : "); 

      jLabel7.setText("Description : "); 

      txtDescription.setColumns(20); 
      txtDescription.setRows(3); 
      jScrollPane2.setViewportView(txtDescription); 

      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
      getContentPane().setLayout(layout); 
      layout.setHorizontalGroup(
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addContainerGap() 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
         .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
          .addGap(0, 0, Short.MAX_VALUE) 
          .addComponent(btnReturn)) 
         .addGroup(layout.createSequentialGroup() 
          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
           .addComponent(jLabel1) 
           .addComponent(jLabel2) 
           .addComponent(jLabel7)) 
          .addGap(33, 33, 33) 
          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
           .addGroup(layout.createSequentialGroup() 
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
             .addComponent(txtInvoice) 
             .addComponent(txtPurchaseDate, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)) 
            .addGap(27, 27, 27) 
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
             .addGroup(layout.createSequentialGroup() 
              .addComponent(jLabel3) 
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
              .addComponent(txtPayment, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE) 
              .addGap(35, 35, 35) 
              .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE) 
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
              .addComponent(txtSalesman, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)) 
             .addGroup(layout.createSequentialGroup() 
              .addComponent(jLabel5) 
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
              .addComponent(txtCustomer, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE) 
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
              .addComponent(jLabel6) 
              .addGap(36, 36, 36) 
              .addComponent(txtReturn, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
           .addGroup(layout.createSequentialGroup() 
            .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE) 
            .addGap(0, 0, Short.MAX_VALUE))))) 
        .addContainerGap()) 
      ); 
      layout.setVerticalGroup(
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addContainerGap() 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel1) 
          .addComponent(txtInvoice, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(jLabel5) 
          .addComponent(txtCustomer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(jLabel6) 
          .addComponent(txtReturn, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
         .addComponent(jLabel2) 
         .addComponent(txtPurchaseDate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addComponent(jLabel3) 
         .addComponent(txtPayment, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addComponent(jLabel4) 
         .addComponent(txtSalesman, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(jLabel7) 
         .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE) 
        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
        .addComponent(btnReturn) 
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      ); 

      pack(); 
     }// </editor-fold>       

     private void txtInvoiceFocusLost(java.awt.event.FocusEvent evt) {          
      String invoice = txtInvoice.getText(); 

      posDao.returnProduct(invoice); 
     } 

     /** 
     * @param args the command line arguments 
     */ 
     public static void main(String args[]) { 
      /* Set the Nimbus look and feel */ 
      //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
      /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
      * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
      */ 
      try { 
       for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
        if ("Nimbus".equals(info.getName())) { 
         javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
         break; 

        } 
       } 
      } catch (ClassNotFoundException ex) { 
       java.util.logging.Logger.getLogger(Return_Goods.class 
         .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } catch (InstantiationException ex) { 
       java.util.logging.Logger.getLogger(Return_Goods.class 
         .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } catch (IllegalAccessException ex) { 
       java.util.logging.Logger.getLogger(Return_Goods.class 
         .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
       java.util.logging.Logger.getLogger(Return_Goods.class 
         .getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } 
      //</editor-fold> 

      /* Create and display the dialog */ 
      java.awt.EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        Return_Goods dialog = new Return_Goods(new javax.swing.JFrame(), true); 
        dialog.addWindowListener(new java.awt.event.WindowAdapter() { 
         @Override 
         public void windowClosing(java.awt.event.WindowEvent e) { 
          System.exit(0); 
         } 
        }); 
        dialog.setVisible(true); 
       } 
      }); 
     } 

     // Variables declaration - do not modify      
     private javax.swing.JButton btnReturn; 
     private javax.swing.JLabel jLabel1; 
     private javax.swing.JLabel jLabel2; 
     private javax.swing.JLabel jLabel3; 
     private javax.swing.JLabel jLabel4; 
     private javax.swing.JLabel jLabel5; 
     private javax.swing.JLabel jLabel6; 
     private javax.swing.JLabel jLabel7; 
     private javax.swing.JPanel jPanel1; 
     private javax.swing.JScrollPane jScrollPane1; 
     private javax.swing.JScrollPane jScrollPane2; 
     public static javax.swing.JTable jTable1; 
     public static javax.swing.JTextField txtCustomer; 
     private javax.swing.JTextArea txtDescription; 
     private javax.swing.JTextField txtInvoice; 
     public static javax.swing.JTextField txtPayment; 
     public static javax.swing.JTextField txtPurchaseDate; 
     private javax.swing.JTextField txtReturn; 
     public static javax.swing.JTextField txtSalesman; 
     // End of variables declaration     
    } 

加入TableModelListener后,我得到exception.java.lang.ArrayIndexOutOfBoundsException:-1

+0

可能的重复[什么导致java.lang.ArrayIndexOutOfBoundsException,我该如何防止它?](http://stackoverflow.com/questions/5554734/what-c​​auses-a-java-lang-arrayindexoutofboundsexception-and-我怎么做,我 - 防止它) – callyalater

回答

0
int row = e.getFirstRow(); 
int column = e.getColumn(); 

我猜上述变量的一个包含-1 。

读取您的堆栈跟踪。它会告诉你导致问题的线路。

-1的值意味着未选择行/列。

然后,如果上述任一值为-1,则需要修改侦听器中的代码以退出。

+0

最初我的JTable是空的。搜索特定的ID后,只有我的JTable被填满。 –

+0

@JikeshPrajapati,不会改变我的答案。您需要自己调试问题。我们无法访问您的代码或数据。 – camickr

+0

列变量生成值为-1,而行生成0作为输出。那么,现在我该如何解决它。 –