3

我正在实现TreeModel接口,并且已经实现了除valueForPathChanged.

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

为什么 TreeModel 接口包含这个方法?它是否JTree在任何情况下都被使用,或者我可以安全地让它未实现?

参考代码,它有效。我只是关心valueForPathChangedJTree是否需要:

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

    }

}
4

1 回答 1

3

虽然您需要实现接口valueForPathChanged()中定义的方法,但TreeModel您可以将其留空。,这里FileTreeModel引用,是一个例子。该方法通常用于支持单元格编辑。作为一个具体的例子,这里看到的实现,“设置识别者的用户对象并发布节点更改[事件]”。valueForPathChanged()DefaultTreeModelTreeNodepath

于 2015-01-27T14:54:27.090 回答