I am writing a Shikaku-Game in Java. In that Shikaku-Game you have to draw rectangles around the shown JLabels (JLabels use an image of the class ViewIcon, that implements the interface icon). Everytime when you draw a new rectangle that intersects an existing one or goes completely over an existing one, the existing rectangle should be deleted and the new one must not be painted. Unfortunatelly now I have the following method that is used in the MouseReleased-Method of my Mouseadapter. Existing rectangles are collected in the ArrayList rectangles. The "not so good looking" if-clause checks all the possibilities how a new rectangle can intersect an existing one.
I put already rectangles.size() in the method to check if the ArrayList clears it's elements, but it doesn't. The amount just raises, but it should normally show as size the amount of rectangles that are in that moment in the game.
Sometimes existing rectangles do disappeare, sometimes just partly, sometimes I can't draw a rectangle on a place where a rectangle alreasy disappeared... I can't understand yet what when happens.
Another information that you should know is what the method drawRectangle(boolean b) does: It takes coordPressed as the top left corner and coordReleased as the buttom right corner (if in the game a rectangle is drawn by the user e.g. from buttom left to top right the method standardizes at first "from top left to buttom right"). After that it finds out (by using the Coordinte-methods getX() and getY()) which JLabel/ViewIcons are the edge ones in that rectangle and puts in these ViewIcons e.g. topLeftLinePainted on true or false, depending on if it should be shown (creation of a rectangle) or hidden (deletion of a rectangle). Creation works perfect, as long as it doesn't intersect another rectangle.
private ArrayList<PaternRectangle> rectangles = new ArrayList();
private Coordinate coordPressed;
private Coordinate coordReleased;
public void drawOrDeleteRectangle() {
Iterator<PaternRectangle> itrPatRect = rectangles.iterator();
boolean rectIntersectionDetected = false;
int itrPatRectIndexCounter = 0;
Coordinate coordPressedBackUp = coordPressed;
Coordinate coordReleasedBackUp = coordReleased;
while (itrPatRect.hasNext()) {
PaternRectangle tempRect = itrPatRect.next();
if (coordReleased.getX() <= tempRect.getCoordButtomRight().getX()
&& coordReleased.getY() <= tempRect.getCoordButtomRight().getY()
&& coordReleased.getX() >= tempRect.getCoordTopLeft().getX()
&& coordReleased.getY() >= tempRect.getCoordTopLeft().getY()
|| coordPressed.getX() <= tempRect.getCoordButtomRight().getX()
&& coordPressed.getY() <= tempRect.getCoordButtomRight().getY()
&& coordPressed.getX() >= tempRect.getCoordTopLeft().getX()
&& coordPressed.getY() >= tempRect.getCoordTopLeft().getY()
|| coordPressed.getX() <= tempRect.getCoordTopLeft().getX()
&& coordPressed.getY() <= tempRect.getCoordTopLeft().getY()
&& coordReleased.getX() >= tempRect.getCoordButtomRight().getX()
&& coordReleased.getY() >= tempRect.getCoordButtomRight().getY()
|| coordPressed.getX() >= tempRect.getCoordButtomRight().getX()
&& coordPressed.getY() <= tempRect.getCoordTopLeft().getY()
&& coordReleased.getX() <= tempRect.getCoordTopLeft().getX()
&& coordReleased.getY() >= tempRect.getCoordButtomRight().getY()
|| coordPressed.getX() >= tempRect.getCoordButtomRight().getX()
&& coordPressed.getY() >= tempRect.getCoordButtomRight().getY()
&& coordReleased.getX() <= tempRect.getCoordTopLeft().getX()
&& coordReleased.getY() <= tempRect.getCoordTopLeft().getY()
|| coordPressed.getX() <= tempRect.getCoordTopLeft().getX()
&& coordPressed.getY() >= tempRect.getCoordButtomRight().getY()
&& coordReleased.getX() >= tempRect.getCoordButtomRight().getX()
&& coordReleased.getY() <= tempRect.getCoordTopLeft().getY()) {
coordPressed = tempRect.getCoordTopLeft();
coordReleased = tempRect.getCoordButtomRight();
drawRectangle(false);
rectIntersectionDetected = true;
rectangles.remove(itrPatRectIndexCounter);
break;
}
itrPatRectIndexCounter++;
}
if (!rectIntersectionDetected) {
coordPressed = coordPressedBackUp;
coordReleased = coordReleasedBackUp;
drawRectangle(true);
PaternRectangle newRectangle = new PaternRectangle(coordPressed, coordReleased);
rectangles.add(newRectangle);
System.out.println("Test");
}
}
I hope that you can help me in deleting the rectangles on a correctly manner, so that they just disappear when they are intersected by a new one...