0

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 の親として使用できます。

どこでコンセプトを間違えたのですか?そこにはかなり単純な間違いがあると思いますが、ここで苦労しています。

4

1 に答える 1

2

以前にここに投稿された同様の質問を見たいと思うかもしれません:

Java:JTreeで複数のノードをプログラムで選択して展開する方法は?

これを見て、それが役立つかどうか教えてください:)

于 2012-11-28T09:15:14.940 に答える