Search code examples
javaswinglistenerjtreeexpand

How to catch JTree node expanded event


I seek for a way in SWING JTree similar to SWT's TreeNode.addListener(SWT.Expand, new Listener()... I managed to check for last selected node to find selected one, but how may I find which node was expanded and handle it in a proper way?


Solution

  • Use the (funny named) TreeWillExpandListener.

    TreeWillExpandListener treeWillExpandListener = new TreeWillExpandListener() {
          public void treeWillCollapse(TreeExpansionEvent treeExpansionEvent)
              throws ExpandVetoException {
    
            TreePath path = treeExpansionEvent.getPath();
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
    
            //Print the name of the node if toString() was implemented
            String data = node.getUserObject().toString();
            System.out.println("WillCollapse: " + data);
    
          }
    
          public void treeWillExpand(TreeExpansionEvent treeExpansionEvent) throws ExpandVetoException {
    
            TreePath path = treeExpansionEvent.getPath();
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
    
            //print the name of the node if toString was implemented  
            String data = node.getUserObject().toString();
            System.out.println("WillExpand: " + data);
    
          }
        };
    
    tree.addTreeWillExpandListener(treeWillExpandListener);