默認

2012-11-28 67 views
0

我知道有很多類似的問題對谷歌被發現,但我似乎無法獲得某種工作選擇節點樹有不同的節點(文件夾或表格)。我可以將文件夾和表格添加到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的父節點。

我在哪裏弄錯了這個概念?我想我確實有一個非常簡單的錯誤,但我在這裏掙扎。

+1

爲了更好地幫助越早,張貼[SSCCE] (http://sscce.org/)。 –

+0

下次會做。抱歉。 – user1827421

+0

*「下次再做」*下次再看看你的問題。請注意,問題可以編輯。 –

回答

2

我猜你可能希望看到一個類似的問題在這裏發佈前:

Java: How to programmatically select and expand multiple nodes in a JTree?

看到這一點,告訴我,如果它可以幫助:)

+0

我以前也見過,但我無法弄清楚如何正確使用它。 – user1827421

+1

好的,發現了一些我能夠適合我的代碼的東西。很多重寫,但現在它的作品:http://wiki.byte-welt.net/wiki/JTree_Zustand_speichern – user1827421

+0

偉大的:)很高興你做到了 –