Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Tree node editing with DefaultTreeModel

import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.MutableTreeNode; import javax.swing.tree.TreePath; public class MainClass {   public static void main(String[] args) {     MutableTreeNode root = new DefaultMutableTreeNode("A");     MutableTreeNode beams = new DefaultMutableTreeNode("B");     MutableTreeNode gears = new DefaultMutableTreeNode("C");     root.insert(beams, 0);     root.insert(gears, 1);     beams.insert(new DefaultMutableTreeNode("4 "), 0);     beams.insert(new DefaultMutableTreeNode("6 "), 1);     beams.insert(new DefaultMutableTreeNode("8 "), 2);     beams.insert(new DefaultMutableTreeNode("12 "), 3);     gears.insert(new DefaultMutableTreeNode("8t"), 0);     gears.insert(new DefaultMutableTreeNode("24t"), 1);     gears.insert(new DefaultMutableTreeNode("40t"), 2);     final DefaultTreeModel model = new DefaultTreeModel(root);     final JTree tree = new JTree(model);     final JTextField nameField = new JTextField("16t");     final JButton button = new JButton("Add a part");     button.setEnabled(false);     button.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent e) {         TreePath tp = tree.getSelectionPath();         MutableTreeNode insertNode = (MutableTreeNode) tp.getLastPathComponent();         int insertIndex = 0;         if (insertNode.getParent() != null) {           MutableTreeNode parent = (MutableTreeNode) insertNode.getParent();           insertIndex = parent.getIndex(insertNode) + 1;           insertNode = parent;         }         MutableTreeNode node = new DefaultMutableTreeNode(nameField.getText());         model.insertNodeInto(node, insertNode, insertIndex);       }     });     JPanel addPanel = new JPanel(new GridLayout(2, 1));     addPanel.add(nameField);     addPanel.add(button);     tree.addTreeSelectionListener(new TreeSelectionListener() {       public void valueChanged(TreeSelectionEvent e) {         TreePath tp = e.getNewLeadSelectionPath();         button.setEnabled(tp != null);       }     });     JFrame frame = new JFrame();     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setSize(200, 200);     frame.getContentPane().add(new JScrollPane(tree));     frame.getContentPane().add(addPanel, BorderLayout.SOUTH);     frame.setVisible(true);   } }