Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTree expandPath适用于文件,但不适用于包装类_Java_Swing_Tree_Jtree - Fatal编程技术网

Java JTree expandPath适用于文件,但不适用于包装类

Java JTree expandPath适用于文件,但不适用于包装类,java,swing,tree,jtree,Java,Swing,Tree,Jtree,我想知道是什么要求使得JTree正常工作。我已经编写了一些代码,显示了一个文件系统树,然后调用expandPath()来展开其中的路径 当我使用文件对象时,一切正常,但树显示每个节点上的完整路径。因此,我将其包装在一个类中,该类更改了toString(),因此只显示dir/filename,但现在expandPath()不再工作,路径也不会展开 package tools.controls.TreeControl.Filesystem; import java.io.File; import

我想知道是什么要求使得
JTree
正常工作。我已经编写了一些代码,显示了一个文件系统树,然后调用
expandPath()
来展开其中的路径

当我使用文件对象时,一切正常,但树显示每个节点上的完整路径。因此,我将其包装在一个类中,该类更改了
toString()
,因此只显示dir/filename,但现在
expandPath()
不再工作,路径也不会展开

package tools.controls.TreeControl.Filesystem;

import java.io.File;
import java.net.URI;

public class TreeFile
    extends File
    implements Cloneable
    , Comparable<File>
{
    private static final long serialVersionUID = 1L;

    public TreeFile(TreeFile oOther)
    {
        super(oOther.getParentFile(), oOther.getName());
    }

    public TreeFile(File oFile)
    {
        super(oFile.getParentFile(), oFile.getName());
    }

    public TreeFile(String oPath)
    {
        super(oPath);
    }

    public TreeFile(URI oFileURL)
    {
        super(oFileURL);
    }

    public TreeFile(String oParent, String oChild)
    {
        super(oParent, oChild);
    }

    public TreeFile(File oParent, String oChild)
    {
        super(oParent, oChild);
    }

    public TreeFile getParentTreeFile()
    {
        File f = getParentFile();
        if(f == null)
            return null;

        return new TreeFile(f);
    }

    public String toString()
    {
        return getName();
    }

    public TreeFile clone()
    {
        return new TreeFile(this);
    }

    @Override
    public int compareTo(File oObject)
    {
        return super.compareTo(oObject);
    }
}
包tools.controls.TreeControl.Filesystem;
导入java.io.File;
导入java.net.URI;
公共类树文件
扩展文件
可克隆的
可比较的
{
私有静态最终长serialVersionUID=1L;
公共树文件(树文件oOther)
{
super(oOther.getParentFile(),oOther.getName());
}
公共树文件(文件的文件)
{
super(oFile.getParentFile(),oFile.getName());
}
公共树文件(字符串oPath)
{
super(oPath);
}
公共树文件(URI oFileURL)
{
超级(oFileURL);
}
公共树文件(字符串不透明、字符串赭色)
{
超级(乳白色、赭色);
}
公共树文件(文件不透明,字符串oChild)
{
超级(乳白色、赭色);
}
公共树文件getParentTreeFile()
{
文件f=getParentFile();
如果(f==null)
返回null;
返回新树文件(f);
}
公共字符串toString()
{
返回getName();
}
公共树文件克隆()
{
返回新树文件(此文件);
}
@凌驾
公共整数比较(文件对象)
{
返回super.compareTo(ooobject);
}
}

“当我使用文件对象时,一切正常,但树显示每个节点上的完整路径。因此…”。请使用专门为
文件制作的
TreeCellRenderer
!请参见示例。这将是一个值得研究的问题。尽管如此,我还是想理解为什么它不起作用,我的课堂上缺少了什么,以至于树接受了它?因为这是一种完全可笑的方式,我对研究它一点也不感兴趣。祝你好运!请提供一份报告,以便我们也能重现您的行为。@AndrewThompson,如果您能解释一下我的方法有什么问题,而不是发表这样不友好的评论,那就太好了。不过,您对cell渲染器的评论让我走上了正确的方向,现在它可以正常工作了,谢谢。这种方法看起来好多了,尽管我仍然想知道为什么我的第一次尝试没有成功。