Java 在添加新行之前验证行不为空

Java 在添加新行之前验证行不为空,java,swing,jtable,Java,Swing,Jtable,我正在开发一个工具,可以将JTable中的内容保存到CSV文件中,我有这个“添加行”按钮来添加新行,但我需要在每个单元格中填充最后一行,然后允许添加新行 这是我的代码,但这不会创建新行,也不会在控制台上抛出任何错误 private void btnAddRowActionPerformed(java.awt.event.ActionEvent evt) { for(int i=0;i<=jTable1.getColumnCount();i++){ if(jTab

我正在开发一个工具,可以将
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(""));
        }
    }
}
private void btnAddRowActionPerformed(java.awt.event.ActionEvent evt){

对于(int i=0;i好的,那么您的意思是,在最后一行完全完成之前,不应该允许用户添加新行

您现有的循环没有意义,基本上,对于每一列,您都要检查是否选择了最后一行,并为每一个空白列插入一个新行(
“”

请记住,通常Java是零索引的,这意味着,最后一行实际上是
jTable1.getRowCount()-1
,因此,如果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
}
boolean rowCompleted=true;
int lastRow=jTable1.getRowCount()-1;
如果(jTable1.isRowSelected(lastRow)){
for(int col=0;col
好的,那么您想说的是,在最后一行完全完成之前,不应该允许用户添加新行

您现有的循环没有意义,基本上,对于每一列,您都要检查是否选择了最后一行,并为每一个空白列插入一个新行(
“”

请记住,通常Java是零索引的,这意味着,最后一行实际上是
jTable1.getRowCount()-1
,因此,如果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
}
boolean rowCompleted=true;
int lastRow=jTable1.getRowCount()-1;
如果(jTable1.isRowSelected(lastRow)){
for(int col=0;col
可以使用
TableModelListener


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

可能会使用
TableModelListener


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

我正在查看此帖子,并使用了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);
    }

} 
private void btnAddRowActionPerformed(java.awt.event.ActionEvent evt){
完成布尔运算;
int lastRow=jTable1.getRowCount()-1;
如果(jTable1.isRowSelected(lastRow)){

对于(int col=0;col我正在检查这篇文章,我使用了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);
    }

} 
private void btnAddRowActionPerformed(java.awt.event.ActionEvent evt){
完成布尔运算;
int lastRow=jTable1.getRowCount()-1;
如果(jTable1.isRowSelected(lastRow)){

对于(int col=0;col)您的循环没有意义。您正在为表模型中的每一列插入新行,而且,您会发现最后一行是
getRowCount()-1
,因此,您的意思是,在最后一行被填充之前,用户不能添加新行…?1)为了更快地获得更好的帮助,发布(最小完整可验证示例)或(简短、自包含、正确的示例)。2)使用逻辑一致的代码行和代码块缩进形式。缩进旨在使代码流更易于遵循!循环没有意义。您正在为表模型中的每一列插入新行,而且,您会发现最后一行是
getRowCount()-1
因此,您的意思是,在最后一行被填充之前,用户不能添加新行…?1)为了更快获得更好的帮助,请发布(最小完整可验证示例)或(简短、自包含、正确的示例)。2)使用逻辑一致的代码行和代码块缩进形式。缩进的目的是使代码流更易于遵循!