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

+0

Итак, что вы говорите, пользователь не может быть разрешен добавить новую строку до заполнения последней строки ...? – MadProgrammer

+0

1) Для лучшей помощи в ближайшее время отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http://www.sscce.org/) (Short , Self Contained, Правильный пример). 2) Используйте логическую и согласованную форму отступающих кодовых строк и блоков. Отступы предназначены для того, чтобы поток кода стал проще следовать! –

ответ

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, действительно, ваш код поможет мне !!! спасибо –

3

может использовать TableModelListener.

Каждый раз, когда ячейка обновляется в последней строке таблицы, вы проверяете, чтобы все столбцы имели данные. Если все столбцы имеют данные, вы включаете кнопку «Добавить строку», иначе вы можете отменить кнопку.

Смежные вопросы