Returns the distance between point p in cont and comp a descendant of cont. - Java java.awt

Java examples for java.awt:Component

Description

Returns the distance between point p in cont and comp a descendant of cont.

Demo Code

/*//from  w  w  w.  ja  v a2s .c o m
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
 * 
 * The contents of this file are subject to the terms of the GNU General Public License Version 3
 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
 * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
 * language governing permissions and limitations under the License.
 * 
 * When distributing the software, include this License Header Notice in each file.
 */
//package com.java2s;
import java.awt.Component;
import java.awt.Container;
import java.awt.Point;
import java.awt.Rectangle;

public class Main {
    public static double getDistance(Point p, Rectangle bounds) {
        if (bounds.contains(p))
            return 0;
        else {
            final int x = getNearest(p.x, bounds.x, bounds.x + bounds.width);
            final int y = getNearest(p.y, bounds.y, bounds.y
                    + bounds.height);
            final int diffX = Math.abs(p.x - x);
            final int diffY = Math.abs(p.y - y);
            return Math.sqrt(diffX * diffX + diffY * diffY);
        }

    }

    /**
     * Returns the distance between point <code>p</code> in <code>cont</code> and <code>comp</code>
     * a descendant of <code>cont</code>.
     * 
     * @param cont a containter.
     * @param p a point within <code>cont</code>.
     * @param comp a descendant of <code>cont</code>.
     * @param bounds to avoid allocating a new <code>Rectangle</code> object on the heap, can be
     *        <code>null</code>.
     * @return the distance between the point and the component.
     */
    public static double getDistance(Container cont, Point p,
            final Component comp, Rectangle bounds) {
        return getDistance(p, getBoundsInAncestor(cont, comp, bounds));
    }

    private static int getNearest(int p, int start, int end) {
        if (p < start)
            return start;
        else if (p > end)
            return end;
        else
            return p;
    }

    public static Rectangle getBoundsInAncestor(Container ancestor,
            final Component comp, Rectangle bounds) {
        bounds = comp.getBounds(bounds);
        Container parent = comp.getParent();
        while (parent != null && parent != ancestor) {
            bounds.translate(parent.getX(), parent.getY());
            parent = parent.getParent();
        }
        return bounds;
    }
}

Related Tutorials