public ZVTreeModel(ZVModel model) {
	this.model = model;
	model.addModelListener(new ZVModelListener() {

	    @Override
	    public void nodeDeleted(ZVNode oldNode, int oldIndex) {
		System.out.println("nodeDeleted : " + oldNode);
		ZVTreeModel.this.fireTreeNodesRemoved(this, ZVTreeModel.this
			.getTreePath(oldNode).getParentPath(),
			new int[] { oldIndex }, new Object[] { oldNode });
	    }

	    @Override
	    public void nodeDataChanged(ZVNode node) {
	        System.out.println("nodeDataChanged : " + node);
	        // FLE+
	        System.out.println("nodeDataChanged : " + node);
	        TreePath parentPath = ZVTreeModel.this.getTreePath(node)
	        .getParentPath();
	        int index = ZVTreeModel.this.getIndexOfChild(
	                parentPath.getLastPathComponent(), node);
	        ZVTreeModel.this.fireTreeNodesChanged(this,
	                parentPath.getPath(), new int[] { index },
	                new Object[] { node });
	    }

	    @Override
	    public void nodeCreated(ZVNode newNode) {
		System.out.println("nodeCreated : " + newNode);
		if (newNode == ZVTreeModel.this.getRoot()) {
		    ZVTreeModel.this.fireTreeStructureChanged(this,
			    new TreePath(newNode));
		} else {
		    try {
			TreePath treePath = ZVTreeModel.this.getTreePath(
				newNode).getParentPath();
			ZVTreeModel.this.fireTreeNodesInserted(this, treePath,
				new int[] { ZVTreeModel.this.getIndexOfChild(
					treePath.getLastPathComponent(),
					newNode) }, new Object[] { newNode });
			// System.out.println("fire done");
		    } catch (Exception e) {
			e.printStackTrace();
		    }
		}
	    }
	});
    }