Java JComponent Properties isOverlapping(JComponent comp1, JComponent comp2)

Here you can find the source of isOverlapping(JComponent comp1, JComponent comp2)

Description

Utility method.

License

Open Source License

Declaration

public static boolean isOverlapping(JComponent comp1, JComponent comp2) 

Method Source Code


//package com.java2s;
import java.awt.*;

import javax.swing.*;

public class Main {
    /**/*from www.j a v a2  s  .  co  m*/
     * Utility method.  Do these two rectangles overlap?
     */
    public static boolean isOverlapping(Rectangle rec1, Rectangle rec2) {
        boolean overlapX = rectanglesOverlapping_XAxis(rec1, rec2);
        boolean overlapY = rectanglesOverlapping_YAxis(rec1, rec2);
        return (overlapX && overlapY);
    }

    /**
     * Utility method.  Do these two components overlap?
     */
    public static boolean isOverlapping(JComponent comp1, JComponent comp2) {
        return isOverlapping(comp1.getBounds(), comp2.getBounds());
    }

    /**
     * Private utility method.  Do these two rectangles overlap horizontally? <p>
     * NOTE:  This method will still return true if the two rectangles are positioned
     * one above the other even though they don't completely overlap.
     */
    private static boolean rectanglesOverlapping_XAxis(Rectangle rec1, Rectangle rec2) {
        boolean bOverlapping = false;
        if ((rec1 == null) || (rec2 == null)) {
            return false;
        }
        int nLeft1 = (int) (rec1.getX());
        int nRight1 = (int) (rec1.getX()) + (int) (rec1.getWidth());
        int nLeft2 = (int) (rec2.getX());
        int nRight2 = (int) (rec2.getX()) + (int) (rec2.getWidth());
        // Find the intersections. If two lines coming from a rectangle corner
        // both have intersection points then there IS overlap.
        boolean bLeft1_Intersects = false;
        boolean bRight1_Intersects = false;
        boolean bLeft2_Intersects = false;
        boolean bRight2_Intersects = false;
        // Are there intersections based on rectangle #1?
        if ((nLeft1 > nLeft2) && (nLeft1 < nRight2)) {
            bLeft1_Intersects = true;
        }
        if ((nRight1 > nLeft2) && (nRight1 < nRight2)) {
            bRight1_Intersects = true;
        }
        // Are there intersections based on rectangle #2?
        if ((nLeft2 > nLeft1) && (nLeft2 < nRight1)) {
            bLeft2_Intersects = true;
        }
        if ((nRight2 > nLeft1) && (nRight2 < nRight1)) {
            bRight2_Intersects = true;
        }
        // Do we overlap or not?
        if (bLeft1_Intersects || bLeft2_Intersects || bRight1_Intersects || bRight2_Intersects) {
            bOverlapping = true;
        }
        return bOverlapping;
    }

    /**
     * Private utility method.  Do these two rectangles overlap vertically? <p>
     * NOTE:  This method will still return true if the two rectangles are positioned
     * beside each other even though they don't completely overlap.
     */
    private static boolean rectanglesOverlapping_YAxis(Rectangle rec1, Rectangle rec2) {
        boolean bOverlapping = false;
        if ((rec1 == null) || (rec2 == null)) {
            return false;
        }
        int nTop1 = (int) (rec1.getY());
        int nBottom1 = (int) (rec1.getY()) + (int) (rec1.getHeight());
        int nTop2 = (int) (rec2.getY());
        int nBottom2 = (int) (rec2.getY()) + (int) (rec2.getHeight());
        // Find the intersections. If two lines coming from a rectangle corner
        // both have intersection points then there IS overlap.
        boolean bTop1_Intersects = false;
        boolean bBottom1_Intersects = false;
        boolean bTop2_Intersects = false;
        boolean bBottom2_Intersects = false;
        // Are there intersections based on rectangle #1?
        if ((nTop1 > nTop2) && (nTop1 < nBottom2)) {
            bTop1_Intersects = true;
        }
        if ((nBottom1 > nTop2) && (nBottom1 < nBottom2)) {
            bBottom1_Intersects = true;
        }
        // Are there intersections based on rectangle #2?
        if ((nTop2 > nTop1) && (nTop2 < nBottom1)) {
            bTop2_Intersects = true;
        }
        if ((nBottom2 > nTop1) && (nBottom2 < nBottom1)) {
            bBottom2_Intersects = true;
        }
        // Do we overlap or not?
        if (bTop1_Intersects || bTop2_Intersects || bBottom1_Intersects || bBottom2_Intersects) {
            bOverlapping = true;
        }
        return bOverlapping;
    }
}

Related

  1. isComponentShowing(final JComponent component)
  2. isHorizontallyVisible(JComponent c, int from, int to)
  3. isMandatory(JComponent comp)
  4. isMarker(JComponent component)
  5. isOver(JComponent c)
  6. isPasteEnabled(JComponent component)
  7. isRectangularSelection(JComponent c)
  8. isRequired(JComponent component)
  9. isVisible(JComponent c, Rectangle r)