Я работаю с классом, который расширяет DefaultTreeSelectionModel для создания CheckBoxTree. При щелчке узла флажка на дереве он запускает MouseEvent, который получает TreePath непосредственно из JTree ("tree").
TreePath path = tree.getPathForLocation(me.getX(), me.getY());
Этот «путь» передается в функцию DefaultTreeSelectionModel.addSelectionPath (), и выбираются соответствующие флажки. Пока все хорошо!
Что я хотел бы сделать, это передать свой собственный TreePath в DefaultTreeSelectionModel.addSelectionPath (), но до сих пор у меня возникают проблемы с форматом TreePath, который, кажется, отличается от TreePath, который я получаю из кода выше, потому что он не имеет такого же эффекта; и это моя проблема.
Когда я нажимаю CheckBox (как это работает), распечатка TreePath выглядит как «[/, Documents and Settings, Administrator]», но для имитации мне нужно будет создать TreePath, как:
File[] finalPath = new File[3];
finalPath[0] = (File)parentNode; // parentNode is the root from the Model
finalPath[1] = new File("Documents and Settings");
finalPath[2] = new File("Administrator");
TreePath path = new TreePath(finalPath);
... который не работает, потому что индексы 1 и 2 не ссылаются на корень, но распечатывает как "[/, Documents and Settings, Administrator]", как и метод рабочего щелчка.
Итак, я попробовал:
File[] finalPath = new File[3];
finalPath[0] = (File)parentNode; // parentNode is the root from the Model
finalPath[1] = new File(finalPath[0],"Documents and Settings");
finalPath[2] = new File(finalPath[1],"Administrator");
TreePath path = new TreePath(finalPath);
..., который оставляет выбранным «parentNode» и «Administrator», но не «Documents and Settings». Распечатка "[/, / Документы и настройки, / Документы и настройки / Администратор]"
Итак, я решил, что все три части должны обрабатываться как отдельные выборки, чтобы все, что появляется нечетное число раз, оставалось выделенным, и поэтому «Документы и настройки» не прилипали. Итак, я попробовал просто.
File[] finalPath = new File[1];
finalPath[0] = new File(parentNode+"Documents and Settings"+File.separator+"Administrator");
TreePath path = new TreePath(finalPath);
... который ничего не выбирает. Распечатка "[\ Documents and Settings \ Администратор]"
Итак, спустя примерно 5 часов попыток различных перестановок, приведенные выше являются самыми близкими к получению, и теперь я публикую свою проблему здесь в надежде получить ответ.
Благодаря !!!! * * 1023