Java Swing: как отразить изменения, внесенные в XML-файл, сразу в визуальное дерево? - PullRequest
1 голос
/ 29 марта 2011

ОБНОВЛЕНИЕ : не обязательно использовать статические файлы.Возможно ли использование строки глобальной переменной и прослушивание, если это изменилось по длине?

ЧТО Я ПЫТАЮСЯ СДЕЛАТЬ: По сути, я пытаюсь представить визуальное древовидное представление документа xmlэто отображается на другой Jpanel.Когда я выбираю узел в этом визуализированном документе XML, я хочу добавить этот узел XML в визуальное дерево.По сути, визуализированный компонент и компонент визуального дерева используют один и тот же файл / переменную xml.

ПРОБЛЕМА (я открыт для альтернативных предложений):

У меня естьвизуальное дерево, сгенерированное следующим методом с использованием org.apache.xerces.parsers.SAXParser .

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

Мне нужно иметь возможность добавлять или удалять узлы и редактировать.Поэтому, когда я нажимаю кнопку, он добавляет узел в визуальное дерево.Тем не менее, я думаю, что должен быть какой-то прослушиватель событий, когда XML-файл был обновлен, чтобы быстро нарисовать дерево.Это может быть неэффективно (?), Поскольку требует перерисовки дерева каждый раз, когда происходит событие изменения файла XML?

private static Component createTree() {
         DefaultMutableTreeNode top = new DefaultMutableTreeNode("test"));

         SAXTreeBuilder saxTree = new SAXTreeBuilder(top); 

         try {             
             SAXParser saxParser = new SAXParser();
             saxParser.setContentHandler(saxTree);
             saxParser.parse(new InputSource(new FileInputStream("test1.xml")));
         }catch(Exception ex){
             ex.printStackTrace();
             top.add(new DefaultMutableTreeNode(ex.getMessage()));
         }

         JTree tree = new JTree(saxTree.getTree()); 
         JScrollPane scrollPane = new JScrollPane(tree);

        return scrollPane;
    }

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Сначала сохраните время изменения XML-файла во временной переменной при первом рисовании дерева, затем используйте поток или TimerTask для отслеживания времени изменения, если есть какое-либо изменение времени изменения по сравнению с временной переменнойэто означает, что файл XML изменен. Вызовите код генерации представления дерева.

1 голос
/ 29 марта 2011

Событие изменения для файлов не существует.Единственный вариант - написать поток опроса, вызывающий java.io.File.lastModified () для вашего файла.В зависимости от ситуации этого может быть достаточно, а производительность не слишком высока.

Если вы хотите, вы также можете использовать эту библиотеку от Apache commons

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...