Как установитьSelectionPaths () для JIDE CheckBoxTree с помощью CheckBoxTreeSelectionModel? - PullRequest
0 голосов
/ 11 мая 2011

Я использую класс CheckBoxTree, который является частью пакета общего уровня JIDE (http://jidesoft.com/products/oss.htm).) Я хотел бы сохранить и загрузить состояние CheckBoxTreeSelectionModel, которое отслеживает, какие поля отмеченыили нет. Я могу сохранить его, просто сохранив selectionModel.getSelectionPaths (), но моя проблема заключается в его загрузке. Когда я selectionModel.setSelectionPaths (), он только проверяет поля для корня и листа пути, но ничего междуКак ни странно, это также происходит, когда я сохраняю результаты getSelectionPaths (), а затем передаю их непосредственно в setSelectionPaths ().

Для FileSystemModel я использую какой-то найденный мной код, который предпочитает использовать объекты FileTreeNodes. Я пробовал разные комбинации FileSystemModels и CheckBoxTrees, которые я нашел в разных местах в сети, и результаты всегда одинаковы. Я, вероятно, потратил около 20 часов на эту проблему ... котораянемного стыдно признаться. Любая помощь приветствуется!

Мой код выглядит следующим образом.Это создает CheckBoxTree и пытается загрузить его с помощью «/ Documents and Settings / Administrator», что приводит к проверке «/» и «Administrator» и всех его дочерних элементов, но не «Documents and Settings».

public class CheckBoxTreeFrame {
    private FileSystemModel fileSystemModel = null;
    private CheckBoxTree checkBoxTree = null;
    private JFrame main_frame = null;
    private CheckBoxTreeSelectionModel selectionModel = null;

    public CheckBoxTreeFrame(){
        // create the model
        fileSystemModel = new FileSystemModel(new File(File.separator));
        // use the model for the Tree
        checkBoxTree = new CheckBoxTree(fileSystemModel);
        checkBoxTree.setEditable(false);
        // model for the checkboxes (not the directory structure)
        selectionModel = checkBoxTree.getCheckBoxTreeSelectionModel();
        // event listener
        checkBoxTree.getCheckBoxTreeSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
                System.out.println(selectionModel.getSelectionPath());
            }
        });

        // setup a little UI window for the tree.
        main_frame = new JFrame("Frame Title");
        main_frame.add(checkBoxTree);
        main_frame.setSize(400, 400);
        main_frame.setVisible(true);

        // run the loading test
        runTest();
    }

    public void runTest(){
        File[] finalPath = new File[3];
        finalPath[0] = (File)selectionModel.getModel().getRoot();
        finalPath[1] = new File(finalPath[0],"Documents and Settings");
        finalPath[2] = new File(finalPath[1],"Administrator");

        selectionModel.setSelectionPath(new TreePath(finalPath));
    }
}

Спасибо !!

1 Ответ

2 голосов
/ 04 ноября 2011

CheckBoxTreeSelectionModel в основном является DefaultTreeSelectionModel (как в Swing).Хитрость пути дерева должна существовать в TreeModel.Я не думаю, что способ создания TreePath в runTest создаст тот же путь дерева.Было бы лучше получить путь дерева от дерева.Попробуйте это, это будет работать.

checkBoxTree.getCheckBoxTreeSelectionModel().addSelectionPath(checkBoxTree.getPathForRow(2));
...