我正在实现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
方法,但是可以将其保留为空。引用FileTreeModel
的here是一个示例。 valueForPathChanged()
方法通常用于支持单元格编辑。作为一个具体示例,在DefaultTreeModel
中的实现,如here所示,“设置由TreeNode
标识的path
的用户对象,并发布已更改的节点[事件]。”
关于java - TreeModel接口(interface)(Swing)中的方法valueForPathChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28170226/