JTable с обновленными значениями после выполнения поиска файла

Я пытаюсь создать программу, которая ищет путь к файлу по известному пути. Если поиск найдет файл, я бы хотел, чтобы программа обновила JTable так что он удаляет этот файл из таблицы.

Дело в том, чтобы таблица отображала файлы, которых еще нет в этой определенной папке.

https://stackru.com/images/2079393ff517b13a51929b5d0ad2e6b7cd875cbe.png

изменить: столбцы "Philly" и "L2" являются именами серверов. Строки - это рабочие станции, которые находятся на этих серверах. Эти два соотношения таковы, что, когда работа была завершена на рабочих станциях, человек, который завершил эту работу, делает снимок экрана с помощью "Snipping Tool", который затем сохраняется в виде файла.PNG в назначенной папке. Файлы сохраняются как... Если сервер 1, рабочая станция 1 завершена, он будет сохранен как "1-1 MyInitials.PNG" внутри указанной папки.

Идея использования автоматического TimerTask - отличная идея, хотя я совершенно не знаком с ней.

1 ответ

Вы можете использовать DefaultTableModel JTable, чтобы найти то, что находится в таблице для совпадения имени файла.

  • Выполните итерацию по строкам таблицы и прочитайте значение в столбце ячейки, который содержит имя файла. Для этого вы можете использовать метод DefaultTableModel#getRowCount() и методы DefaultTableModel#getValueAt().
  • Как только вы нашли совпадение, которое хотите удалить из таблицы, вы можете использовать метод DefaultTableModel#removeRow().

Метод для такого рода вещей может выглядеть примерно так (не проверено):

public void removeIfExist(JTable yourJTable, String fileName) {
    // Get Table Model
    DefaultTableModel dtm = (DefaultTableModel) yourJTable.getModel();

    // Get Table Row Count
    int rowCount = dtm.getRowCount();

    // Assuming file names are in column 1 
    // and not in column 0.
    int fileNameColumn = 1; 

    // Iterate through each table row and get the String 
    // value for what is within the row cell of column 1.
    for (int i = 0; i < rowCount; i++) {
        // Grab the string value in column 1 of current row.
        String stringValue = dtm.getValueAt(i, fileNameColumn).toString();
        // Is the cell's String value the same as the file name?
        // If you want to ignore letter case for comparing then 
        // use equalsIgnoreCase() instead of equals().
        if (stringValue.equals(fileName)) {
            // Yes it is so remove the row from JTable.
            dtm.removeRow(i);
            // Found a match so no need to check 
            // further. Get out of loop.
            break;  
        }
        // No it's not so check the cell in next
        // table row (if there is one).
    }
}

Конечно, вы можете изменить этот метод для обработки списка имен файлов вместо одного имени файла за раз. Опять же, приведенный выше код не тестируется и просто очень быстро, но я думаю, что это дает вам представление о том, как это можно сделать.

Другие вопросы по тегам