2015-02-10 27 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

每次在表格的最后一行更新单元格时,都会检查以确保所有列都有数据。如果所有列都有数据,则启用“添加行”按钮,否则您无法使用该按钮。

相关问题