Как прослушать добавление нового файла в папку для отображения в JTable? - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблема с моим графическим интерфейсом. Я использую WatchService, и он работает хорошо. Как добавить этот сервис, чтобы JTable показывал новый файл?

Может быть, есть другое решение? Могу я попросить вас привести несколько примеров? Мой стол реализует AbstractTableModel.

1 Ответ

0 голосов
/ 20 ноября 2018

Я решил мою проблему с этим, но теперь, если я добавляю новый файл, моя таблица обновляется, но они теряют представление рендерера для jprogress bar и флажка. Мне нужна помощь.

    Path path = Paths.get(filePath.getAbsolutePath());
    try {
        Boolean isFolder = (Boolean) Files.getAttribute(path, "basic:isDirectory", NOFOLLOW_LINKS);
        if (!isFolder) {
            Log.error(this, "Path: " + path + " is not a folder");
            throw new IllegalArgumentException("Path: " + path + " is not a folder");
        }
        System.out.println("Watching path: " + path);
        WatchService watchService = path.getFileSystem().newWatchService();
        path.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);

        WatchKey key;
        while ((key = watchService.take()) != null) {
            for (WatchEvent<?> event : key.pollEvents()) {
                File[] files = filePath.listFiles();
                customTableDataList.clear();
                    for (File file : files) {
                        customTableData = new CustomTableData(file);
                        customTableDataList.add(customTableData);
                    }
                customTableModel = new CustomTableModel(customTableDataList);

Это решает мою проблему, таблица перезагружается, но представление не отображается.

              myTable.setModel(customTableModel);

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

               myTable = new Table(customTableModel);
                myTable.repaint();

                System.out.println("#LIST: " + customTableDataList + " >>> #SIZE: " + customTableDataList.size());
            }

            //Log.info(this, "#LIST: " + customTableDataList + " >>> #SIZE: " + customTableDataList.size());
            key.reset();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.getMessage();
    }
...