そんな困った。オーバーレイ データベース構造があり、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のようなメソッドが見つかりませんでした。