Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4622757

REGRESSION: JTree updates improperly after removing nodes/adding new one

XMLWordPrintable

    • hopper
    • x86
    • windows_98, windows_2000
    • Verified



      Name: jk109818 Date: 01/11/2002


      FULL PRODUCT VERSION :
      java version "1.4.0-beta3"

      Java(TM) 2 Runtime Environment, Standard Edition (build
      1.4.0-beta3-b84)

      Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed
      mode)


      FULL OPERATING SYSTEM VERSION :
      Windows Millennium [Version 4.90.3000]


      A DESCRIPTION OF THE PROBLEM :
      JTree no longer seems to update its view properly
      when adding a node after removing a set of nested
      and selected tree nodes.

      See steps to reproduce.


      REGRESSION. Last worked in version merlin-beta3

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run attached test case

      The following things happen:
      - A JTree with a DefaultTreeModel is created
      - The root node is 'root'
      - 'node1' is added to 'root'
      - 'node1a' is added to 'node1'
      - 'node2' is added to 'root'
      - 'node1', 'node1a' and 'node2' are selected
      - 'node1' and 'node2' are removed from 'root'
        ('node1a' is implicitly removed too)
      - now a new node ('node3') is added to root


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      Expected result:

      'node3' should be visible on the screen (it is in 1.3.1)

      Actual result:

      'node3' isn't displayed


      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.*;
      import javax.swing.*;
      import javax.swing.tree.*;

      public class TreeCase extends JFrame {
        public TreeCase() {
          super("TreeCase");
          
          DefaultMutableTreeNode root = new DefaultMutableTreeNode
      ("root");
          DefaultTreeModel model = new DefaultTreeModel(root);
          JTree tree = new JTree(model);
          setContentPane(tree);
          
          setSize(new Dimension(608, 384));
          show();
                  
          DefaultMutableTreeNode node1 = new
      DefaultMutableTreeNode("node1");
          root.add(node1);
          model.nodesWereInserted(root, new int[]{0});
          tree.expandRow(0);
          
          DefaultMutableTreeNode node1a = new
      DefaultMutableTreeNode("node1a");
          node1.add(node1a);
          model.nodesWereInserted(node1, new int[]{0});
          tree.expandRow(1);
          
          DefaultMutableTreeNode node2 = new
      DefaultMutableTreeNode("node2");
          root.add(node2);
          model.nodesWereInserted(root, new int[]{1});
          
          tree.setSelectionInterval(1, 3);
          
          root.remove(node1);
          root.remove(node2);
          model.nodesWereRemoved(root, new int[]{0, 1}, new Object
      []{node1, node2});
          
          DefaultMutableTreeNode node3 = new
      DefaultMutableTreeNode("node3");
          root.add(node3);
          model.nodesWereInserted(root, new int[]{0});
          tree.expandRow(0);
        }
        
        public static void main(String[] args) {
          new TreeCase();
        }
      }

      ---------- END SOURCE ----------

      Release Regression From : 1.3.1_02
      The above release value was the last known release where this
      bug was knwon to work. Since then there has been a regression.

      (Review ID: 137837)
      ======================================================================

            svioletsunw Scott Violet (Inactive)
            jkimsunw Jeffrey Kim (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: