Java JTree зависает при повторном выборе файла - PullRequest
1 голос
/ 22 ноября 2011

У меня есть JTree, который я использую как дерево файлов.Если я выберу новый файл и выберу тот же, который уже был выбран, дерево по какой-то причине зависнет.Следует удалить старый JScrollPane, содержащий дерево, и заменить его новым, и он будет работать нормально, если я выберу другой файл, но не тот же.Остальная часть графического интерфейса все еще работает, это просто дерево, которое зависает.Вот соответствующий код:

if ("browse".equals(e.getActionCommand())) {
        returnVal = fc.showOpenDialog(DSAuto.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            filename = file.getAbsolutePath();
            l1.setText("Job Location: " + filename);
            c.fill = GridBagConstraints.BOTH;
            c.weightx = 1.0;
            c.gridx = 0;
            c.gridy = 1;
            c.gridwidth = 10;
            c.gridheight = 9;
            c.ipady = 0;
            if (rm)
                pane.remove(ft1);
            else
                pane.remove(sp1);
            if (rm2) {
                pane.remove(l3);
                rm2 = false;
            }
            if (!(file.isDirectory() || file.isFile())) {
                l3 = new JLabel("404 File Not Found");
                pane.add(l3, c);
                rm2 = true;
            } else {
                ft1 = new FileTree(file);
                ft1.all = allB;
                pane.add(ft1, c);
                rm = true;
            }
        }

    }

Я также могу предоставить код для класса FileTree, если это необходимо.

1 Ответ

3 голосов
/ 22 ноября 2011

Следует удалить старую рамку и заменить ее новой

Вы не можете добавить / удалить JFrame из JFrame, поэтому я не знаю, что означает этот комментарий.

Не удалять / добавлять компоненты? Если вы хотите обновить существующий компонент, измените модель. То есть:

tree.setModel(...);

Или, если вы удаляете / добавляете компоненты, вам нужно использовать:

panel.revalidate();
panel.repaint();
...