我正在实现TreeModel interface,并且已经实现了除valueForPathChanged之外的所有方法。

就我而言,这些值不会以编程方式更改。

为什么TreeModel接口包含此方法? JTree在任何情况下都使用它,还是我可以放心地不执行它?

代码供参考,它可以工作。我只是担心JTree是否需要valueForPathChanged

class ParamsTreeModel implements TreeModel  {
    private final TreeRoot root;
    private final List<TreeModelListener> listeners = new ArrayList<TreeModelListener>();
    ParamsTreeModel(TreeRoot root)  {
        this.root = root;
    }

    @Override
    public void addTreeModelListener(TreeModelListener l) {
        listeners.add(l);
    }

    @Override
    public Object getChild(Object parent, int index) {
        if(parent instanceof Param) return null;
        if(structuredMap.containsKey(parent))   {
            return structuredMap.get(parent).get(index);
        }
        // Root
        return partNames.get(index);
    }

    @Override
    public int getChildCount(Object parent) {
        if(parent instanceof Param) return 0;
        if(parent instanceof TreeRoot)  return partNames.size();
        return structuredMap.get(parent).size();
    }

    @Override
    public int getIndexOfChild(Object parent, Object child) {
        if(parent instanceof TreeRoot)  return partNames.indexOf(child);
        return structuredMap.get(parent).indexOf(child);
    }

    @Override
    public Object getRoot() {
        return root;
    }

    @Override
    public boolean isLeaf(Object node) {
        return (node instanceof Param);
    }

    @Override
    public void removeTreeModelListener(TreeModelListener l) {
        listeners.remove(l);
    }

    @Override
    public void valueForPathChanged(TreePath path, Object newValue) {
        // TODO Auto-generated method stub

    }

}

最佳答案

虽然需要实现valueForPathChanged()接口中定义的TreeModel方法,但是可以将其保留为空。引用FileTreeModelhere是一个示例。 valueForPathChanged()方法通常用于支持单元格编辑。作为一个具体示例,在DefaultTreeModel中的实现,如here所示,“设置由TreeNode标识的path的用户对象,并发布已更改的节点[事件]。”

关于java - TreeModel接口(interface)(Swing)中的方法valueForPathChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28170226/

10-10 23:46