Java examples for java.awt:Component
Returns the distance between point p in cont and comp a descendant of cont.
/*//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; } }