我知道有很多類似的問題對谷歌被發現,但我似乎無法獲得某種工作選擇節點樹有不同的節點(文件夾或表格)。我可以將文件夾和表格添加到JTree,並在重新加載模型後顯示。現在我想要做的是,一旦我向Tree添加了一個新的文件夾或表格,就應該選擇並擴展這個文件夾或表格,但是我不能讓它工作。默認
我會盡量只挑碼的重要棋子:
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] (http://sscce.org/)。 –
下次會做。抱歉。 – user1827421
*「下次再做」*下次再看看你的問題。請注意,問題可以編輯。 –