Проверочная строка не пуста перед добавлением новой строки

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
  • 0
    Итак, вы говорите, что пользователь не может добавить новую строку, пока последняя строка не будет заполнена ...?
Показать ещё 1 комментарий
Теги:
swing
jtable

3 ответа

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 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 data",1);
    }

} 

Надеюсь, это поможет вам, но сначала скажите спасибо MadProgrammer: D

3

Возможно, используйте TableModelListener.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню