1

我遇到了这样的麻烦。我有一个覆盖数据库结构并使用 JTree 来显示项目。这是我对模型的简化视图:

public class MenuTreeModel implements TreeModel {
private MenuList ml;

public MenuTreeModel( MenuList ml ) {
    this.ml = ml;
}

@Override
public void addTreeModelListener(TreeModelListener l) {

}

@Override
public Object getChild(Object parent, int index) {
    if ( parent.getClass().hashCode() == MenuList.class.hashCode() ){
        return ((MenuList) parent).getStation(index);
    }
    if ( parent.getClass().hashCode() == MenuStations.class.hashCode() ){
        return ((MenuStations) parent).get(index);
    }
    return null;
}

@Override
public int getChildCount(Object parent) {
    if ( parent.getClass().hashCode() == MenuList.class.hashCode() ){
        return ((MenuList) parent).getSize();
    }
    if ( parent.getClass().hashCode() == MenuStations.class.hashCode() ){
        return ((MenuStations) parent).getSize();
    }
    return 0;
}

@Override
public int getIndexOfChild(Object parent, Object child) {
    if ( parent.getClass().hashCode() == MenuList.class.hashCode() ){
        return ((MenuList) parent).getIndexOf((MenuStations) child);
    }
    if ( parent.getClass().hashCode() == MenuStations.class.hashCode() ){
        return ((MenuStations) parent).getIndexOf((MenuCats) child);
    }
    return 0;
}

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

@Override
public boolean isLeaf(Object node) {
    return node.getClass().hashCode() == MenuCats.class.hashCode();
}

@Override
public void removeTreeModelListener(TreeModelListener l) {
    // TODO Auto-generated method stub

}

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

}

当我从ml或其内部项目中删除某些内容时,树结构不会改变。我找不到像fireTreeModelChanged这样的方法。

4

2 回答 2

1

fireTreeModelChanged()如果您的模型扩展了包含此类方法的类,您只会找到一个方法。但与TableModel具有关联AbstractTableModel包含fireXxx()方法的 不同,树没有这样的类。您最好的选择是使用DefaultTreeModel, 或定义您自己的事件触发方法。

当然,为了能够实现它们,您需要在addTreeModelListener()方法中实际添加侦听器,而不是什么都不做。

代码中应该更改的另一件事是您对哈希码的比较。这样做没有任何意义。顺便说一句,两个不同的类可能具有相同的哈希码。只需使用

parent.getClass().equals(MenuList.class)

或者

parent instanceof MenuList
于 2012-11-25T16:28:34.077 回答
0

您的一段代码不足以解决您的问题。但这是动态树的一个很好的例子。

DynamicTreeDemo来自docs.oracle.com

下载类DynamicTreeDemo.java然后DynamicTree.java运行它。

于 2012-11-25T16:50:32.550 回答