Я разрабатываю инструмент, который должен сохранять содержимое из 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(""));
}
}
}
Я проверял этот пост, и я использовал код, отправленный 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
Возможно, используйте TableModelListener
.
Каждый раз, когда ячейка обновляется в последней строке таблицы, вы проверяете, чтобы все столбцы имели данные. Если все столбцы имеют данные, вы включаете кнопку "Добавить строку", иначе вы можете отменить кнопку.
Хорошо, так что вы, кажется, говорите, пользователь не должен позволять добавлять новую строку до тех пор, пока последняя строка не будет полностью завершена...
Вы существующий цикл не имеет смысла, в основном, для каждого столбца, вы проверяете, выбрана ли последняя строка, и вставка новой строки для каждого столбца, который является пустым (""
)...?
Помните, что в общем случае 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
}
getRowCount() - 1