2015-02-10 50 views
1

我正在開發一個工具,它應該將JTable的內容保存到CSV文件中,我有這個「添加行」按鈕添加一個新行,但我需要最後一行填入每個單元格,然後被允許添加一個新行。在添加新行之前驗證行是不是空的

這是我有的代碼,但是這不會創建新行,也不會在控制檯上拋出任何錯誤。

private void btnAddRowActionPerformed(java.awt.event.ActionEvent evt) { 
    for(int i=0;i<=jTable1.getColumnCount();i++){ 
     if(jTable1.isRowSelected(jTable1.getRowCount())){ 
      do{ 
       model.insertRow(jTable1.getRowCount(), new Object[]{}); 
      } while(jTable1.getValueAt(jTable1.getRowCount(), i).equals("")); 
     } 
    } 
} 
+0

你的循環沒有意義。你爲表模型中的每一列插入一個新行,同樣,你會發現最後一行是'getRowCount() - 1' – MadProgrammer 2015-02-10 23:49:24

+0

因此,你所說的是,用戶不能被允許添加一個新的行,直到最後一行被填充......? – MadProgrammer 2015-02-10 23:58:20

+0

1)爲了更快地獲得更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/)(短,獨立,正確的例子)。 2)使用合乎邏輯的一致形式縮進代碼行和塊。縮進旨在使代碼的流程更易於遵循! – 2015-02-11 00:06:35

回答

1

我在查看這篇文章,並且使用了MadProgrammer發佈的代碼,但是我做了一些修改,並且根據您的需要正確使用了它。如果你願意,你可以問我的項目,我可以高興地提供給你

private void btnAddRowActionPerformed(java.awt.event.ActionEvent evt) {           
    boolean rowCompleted; 
    int lastRow = jTable1.getRowCount()-1; 
    if(jTable1.isRowSelected(lastRow)){ 
     for(int col=0;col<jTable1.getColumnCount();col++){ 
      Object value = jTable1.getValueAt(lastRow, col); 
      if(value == null || value.toString().trim().isEmpty()){ 
       rowCompleted=false; 
      } 
      else{ 
       rowCompleted=true; 
      } 
      if(rowCompleted==true){ 
       model.insertRow(jTable1.getRowCount(), new Object[]{}); 
      } 
      else{ 
       JOptionPane.showMessageDialog(null, "Something went worng. Try this:\n - Please select a row before adding new row.\n - Please verify there are no empty cells","Processing table's data",1); 
      } 
      break; 
     } 
    } 
    else{ 
     JOptionPane.showMessageDialog(null, "Something went wrong. Verify this:\n - There is not any row selected.\n - You can only create new rows after last row","Processing table's data",1); 
    } 

} 

我希望這能幫助你,但首先說感謝MadProgrammer:d

3

好了,你彷彿可以是說,用戶不應該被允許添加新行,直到最後一行全部完成......

您現有的循環不會使基本上,對於每一列,您正在檢查是否選擇了最後一行,併爲每個空白的列插入一行("")...?請記住,通常Java是零索引的,這意味着,最後一行實際上是jTable1.getRowCount() - 1,所以,它不太可能是你的if isRowSelected將是真的,這實際上是一件好事,否則你會有一個真正的混亂。 ..

假設我正確地理解你的問題(因爲它是一個有點含糊),你可以嘗試更多的東西像這樣...

boolean rowCompleted = true; 
int lastRow = jTable1.getRowCount() - 1; 
if (jTable1.isRowSelected(lastRow)) { 
    for (int col = 0; col < jTable1.getColumnCount(); col++) { 
     Object value = jTable.getValueAt(lastRow, col); 
     if (value == null || value.toString().trim().isEmpty()) { 
      rowCompleted = false; 
      break; 
     } 
    } 
} 

if (rowCompleted) { 
    // Insert new row... 
} else { 
    // Show error message 
} 
+0

謝謝@MadProgrammer,的確你的代碼可以幫助我!謝謝 – 2015-02-11 16:56:49

3

也許使用TableModelListener

每次在表格的最後一行更新單元格時,都會檢查以確保所有列都有數據。如果所有列都有數據,則啓用「添加行」按鈕,否則您無法使用該按鈕。

相關問題