Add and remove tree Node and expand the tree node
import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class ModelJTree extends JFrame { private JTree tree; private DefaultTreeModel model; private DefaultMutableTreeNode rootNode; public ModelJTree() { DefaultMutableTreeNode philosophersNode = getPhilosopherTree(); model = new DefaultTreeModel(philosophersNode); tree = new JTree(model); JButton addButton = new JButton("Add Philosopher"); addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { addPhilosopher(); } }); JButton removeButton = new JButton("Remove Selected Philosopher"); removeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { removeSelectedPhilosopher(); } }); JPanel inputPanel = new JPanel(); inputPanel.add(addButton); inputPanel.add(removeButton); Container container = getContentPane(); container.add(new JScrollPane(tree), BorderLayout.CENTER); container.add(inputPanel, BorderLayout.NORTH); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } private void addPhilosopher() { DefaultMutableTreeNode parent = getSelectedNode(); if (parent == null) { JOptionPane.showMessageDialog(ModelJTree.this, "Select an era.", "Error", JOptionPane.ERROR_MESSAGE); return; } String name = JOptionPane.showInputDialog(ModelJTree.this, "Enter Name:"); model.insertNodeInto(new DefaultMutableTreeNode(name), parent, parent.getChildCount()); } private void removeSelectedPhilosopher() { DefaultMutableTreeNode selectedNode = getSelectedNode(); if (selectedNode != null) model.removeNodeFromParent(selectedNode); } private DefaultMutableTreeNode getSelectedNode() { return (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); } private DefaultMutableTreeNode getPhilosopherTree() { DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Philosophers"); DefaultMutableTreeNode ancient = new DefaultMutableTreeNode("Ancient"); rootNode.add(ancient); ancient.add(new DefaultMutableTreeNode("Socrates")); DefaultMutableTreeNode medieval = new DefaultMutableTreeNode("Medieval"); rootNode.add(medieval); return rootNode; } public static void main(String args[]) { new ModelJTree(); } }