【发布时间】:2012-11-16 01:55:36
【问题描述】:
我知道在 Google 上可以找到很多类似的问题,但我似乎无法以某种方式使其工作:
我有一个 JTree(称为项目),这棵树有不同的节点(文件夹或表)。我可以将文件夹和表添加到 JTree 并在重新加载模型后显示。现在我想做的是,一旦我向树中添加了一个新的文件夹或表,就应该选择并展开这个文件夹或表,但我无法让它工作。
我将尝试只挑选代码的重要部分:
public void openProject() {
final JFileChooser select = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"Project Files (.prj)", "prj");
select.addChoosableFileFilter(filter);
int returnVal = select.showOpenDialog(null);
String path = select.getSelectedFile().getPath();
String extention = path.substring(path.length() - 4);
if (returnVal == JFileChooser.APPROVE_OPTION
&& extention.equalsIgnoreCase(".prj")) {
try {
XMLDecoder d = new XMLDecoder(new BufferedInputStream(
new FileInputStream(path)));
setModel((TreeModel) d.readObject());
d.close();
// restore status
List<TreeNode[]> expanded = (List<TreeNode[]>) d.readObject();
for (int i = expanded.size() - 1; i > -1; i--) {
TreeNode[] ar = expanded.get(i);
expandPath(new TreePath(ar));
}
projectPath = path;
} catch (FileNotFoundException ex) {
}
setRootVisible(true);
reloadTree();
root = (DefaultMutableTreeNode) getModel().getRoot();
}
}
这件作品将打开一个现有的项目(新项目的类似功能),定义根,设置模型并重新加载树。
如果我现在尝试:
public void addTable(){
Table table = new Table();
table.setUserObject("Table1");
try{
DefaultMutableTreeNode last = (DefaultMutableTreeNode) getLastSelectedPathComponent();
last.add(table);
}catch(Exception e){
root.add(table);
}
TreePath path = new TreePath(table.getPath());
setSelectionPath(path);
expandPath(path);
reloadTree();
}
public void addFolder(){
Folder folder = new Folder();
folder.setUserObject("Folder1");
try{
DefaultMutableTreeNode last = (DefaultMutableTreeNode) getLastSelectedPathComponent();
last.add(folder);
}catch(Exception e){
root.add(folder);
}
TreePath path = new TreePath(folder.getPath());
setSelectionPath(path);
expandPath(path);
reloadTree();
}
它会添加节点,但不会扩展路径或选择新创建的节点。如果我手动选择节点,我可以将它用作 getLastSelectedPathComponent 的父节点。
我在哪里弄错了这个概念?我想我确实有一个非常简单的错误,但我在这里挣扎。
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
“下次会做” 下次会调查您的问题。请注意,问题可以编辑。