Я разрабатываю имитацию мира, где World
представлена:Как уведомить TreeModel о том, что его базовая модель изменилась?
public class World {
Turtle turtle;
// .. basic constructors, getters, setters
}
и Turtle
представлено:
public class Turtle {
List<Turtle> turtles;
// .. basic constructors, getters, setters
}
где а Turtle
стоит на спинах его turtles
и World
покоится на одном, главном Turtle
(у кого могут быть черепахи под ним). Я хочу представить это в Swing как JTree.
Так я код вверх JTree и TreeModel:
JTree tree = new JTree(new WorldModel(world.getTurtle());
public class WorldModel implements TreeModel {
private Turtle = null;
public WorldModel(Turtle turtle) {
this.turtle = turtle;
}
@Override
int getChildCount(Object object) {
return ((Turtle) object).getNumTurtles();
}
@Override
Object getChild(Object parent, int index) {
return ((Turtle) object).getTurtle(index);
}
// etc., you get the overbearing point
}
Это работает прекрасно до точки, в которой я изменить Turtle
я сначала прошел в конструктору TreeModel в:
world.getTurtle().removeAllTurtleChildren();
Как обновить JList, чтобы отразить это изменение? Должен ли я создать новый TreeModel и установить его снова?
(Я хотел бы остаться в стороне от DefaultTreeModel, если это возможно.)
'TreeModel' имеет два важных метода: addTreeModelListener и' removeTreeModelListener'. Вам нужно создать соответствующие события и уведомить зарегистрированных пользователей о изменении состояния модели – MadProgrammer
Пример Fpr, посмотрите, как 'DefaultTreeModel' использует' listenerList'. – trashgod
Почему вы хотите остаться в стороне от DefaultTreeModel? Любые конкретные причины для этого? –