2017-03-31 54 views
0

我從用戶輸入創建一個JTable。在GUI中有一組單選按鈕,當選擇一個時,它需要更新表格中列的所有值。ArrayIndexOutOfBounds當在JTable中設置單元格的值時

我得到一個arrayIndexOutofBounds錯誤與此。不完全確定我做錯了什麼。任何輸入將不勝感激,因爲這是我第一次使用jtable,它比我想象的要難。

代碼在那裏我得到一個錯誤:

class RadioListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    {         
     if(oneRadio.isSelected()) 
     { 
      payAMT = payAMT * .01; 
      for(int i = 1; i < outputTable.getRowCount(); i++) 
      { 
       outputTable.setValueAt(payAMT,i,4); 
      } 

     } 

代碼:

//JTableCreation 

model = new DefaultTableModel(new String[] {"Emp Num", "Base Pay", "Hours Worked", "Pay Amt"}, 0); 
    outputTable = new JTable(); 
    outputTable.setModel(model); 
    JScrollPane scroll = new JScrollPane(outputTable); 

更多的代碼 //將項添加到JTable中

class clickListener implements ActionListener 
{ 
    @SuppressWarnings("unchecked") 
    public void actionPerformed(ActionEvent e) 
    { 
     int empNum = 0; 
     double hourlyRate = 0; 
     double hoursWorked = 0; 

     try 
     { 
      empNum = Integer.parseInt(empNumField.getText()); 
     } 
     catch(NumberFormatException event) 
     { 
      JOptionPane.showMessageDialog(null, "Invalid entry.\n\nPlease enter a number for the Employee ID.", "Error", JOptionPane.WARNING_MESSAGE); 
      return; 
     } 
     try 
     { 
      hourlyRate = Double.parseDouble(basePayField.getText()); 
     } 
     catch(NumberFormatException event) 
     { 
      JOptionPane.showMessageDialog(null, "Invalid entry.\n\nPlease enter a number for the Hourly Pay Rate.", "Error", JOptionPane.WARNING_MESSAGE); 
      return; 
     } 
     try 
     { 
      hoursWorked = Double.parseDouble(hrsField.getText()); 
     } 
     catch(NumberFormatException event) 
     { 
      JOptionPane.showMessageDialog(null, "Invalid entry.\n\nPlease enter a number for the Hours Worked.", "Error", JOptionPane.WARNING_MESSAGE); 
      return; 
     } 

     payAMT = calculatePay(hourlyRate, hoursWorked); 

     Object[] newRecord = {empNum,hourlyRate,hoursWorked,payAMT}; 
     model.addRow(newRecord); 

     totalPayAMT += payAMT; 
     totalPayLabel.setText("Total Employee Pay: "+totalPayAMT); 
    } 
} 
+0

也許您想開始循環在索引0而不是1? – csmckelvey

+0

我在發帖之前試過兩種方法。同樣的錯誤。 – Justiciar

+0

所以,當這段代碼產生這個錯誤時,給我們一個特定的場景。列表爲空時會發生嗎?當它有一個元素時會發生嗎?有很多元素時會發生嗎?當您在調試器中瀏覽代碼時,您發現了哪些相關信息?既然你不顯示堆棧跟蹤,你怎麼確定你指出的代碼行是問題? – csmckelvey

回答

1

您需要啓動迭代JTable爲0. JTable的列是基於0的。當你開始你的循環爲1時,你並不是真的從第一排開始,就像你想的那樣,你實際上是從第2行開始。在那裏你也陷入困境的是JTable.getRowCount( )方法。此方法將返回當前包含在您的JTable中的實際行數,因此您需要調整其值(減1)以便用於迭代,例如:

int cnt = outputTable.getRowCount(); 
if(oneRadio.isSelected() && cnt > 0) { 
    payAMT = payAMT * .01; 
    for(int i = 0; i < cnt - 1; i++) { 
     outputTable.setValueAt(payAMT, i, 4); 
    } 
} 
相關問題