code: public Map<TreeNode, Rectangle2D.Double> getNodeBounds() {
  		if (nodeBounds == null) {
  			nodeBounds = this.useIdentity ? new IdentityHashMap<TreeNode, Rectangle2D.Double>()
  					: new HashMap<TreeNode, Rectangle2D.Double>();
  			for (Entry<TreeNode, Point2D> entry : positions.entrySet()) {
  				TreeNode node = entry.getKey();
  				Point2D pos = entry.getValue();
  				double w = getNodeWidth(node);
  				double h = getNodeHeight(node);
  				double x = pos.getX() - w / 2;
  				double y = pos.getY() - h / 2;
  				nodeBounds.put(node, new Rectangle2D.Double(x, y, w, h));
  			}
  		}
  		return nodeBounds;
  	}
docs: Returns the layout of the tree nodes by mapping each node of the tree to
  its bounds (position and size).
  <p>
  For each rectangle x and y will be &gt;= 0. At least one rectangle will have
  an x == 0 and at least one rectangle will have an y == 0.
  
  @return maps each node of the tree to its bounds (position and size).