import javax.swing.*;
import javax.swing.tree.*;

public class TreeModelEventInitWithNull {
    private static class TestTreeModel extends DefaultTreeModel {
        public TestTreeModel(DefaultMutableTreeNode root) {
            super(root);
        }

        public void changeRootTitle() {
            ((DefaultMutableTreeNode)root).setUserObject("new root");
            this.fireTreeNodesChanged(this, null, new int[]{0}, new Object[]{root});
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame("TreeModelEventInitWithNull");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(200, 200);

                DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
                root.add(new DefaultMutableTreeNode("leaf1"));
                root.add(new DefaultMutableTreeNode("leaf2"));
                TestTreeModel model = new TestTreeModel(root);
                JTree tree = new JTree(model);
                frame.getContentPane().add(new JScrollPane(tree));

                frame.setVisible(true);
                model.changeRootTitle();
            }
        });
    }
}
