Cześć, piszę mały program, który pozwala użytkownikowi zaznaczyć obszar na powierzchni JFrame.
Równo po skończeniu zaznaczania, wywołuję zamknięcie okna, zapisanie danych wybranego prostokąta, a następnie jego wyczyszczenie.

Robię to w taki sposób:

public void paintComponent(Graphics th) {
		super.paintComponent(th);
		Graphics2D g = (Graphics2D) th;
		setBackground(Color.BLACK);
		g.setColor(Color.WHITE);
		g.setComposite(AlphaComposite
				.getInstance(AlphaComposite.SRC_OVER, 0.3f));
		g.fill(areaRect);
		System.out.println("Rektangiel" + areaRect);
		if (x1 < x2 && y1 < y2) {
			areaRect.setBounds(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));

		} else if (x1 > x2 && y1 > y2) {
			areaRect.setBounds(x2, y2, Math.abs(x2 - x1), Math.abs(y2 - y1));

		} else if (y1 < y2) {
			areaRect.setBounds(x2, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));

		} else if (y1 > y2) {
			areaRect.setBounds(x1, y2, Math.abs(x2 - x1), Math.abs(y2 - y1));
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		repaint();
		x1 = e.getX();
		y1 = e.getY();
		x2 = x1;
		y2 = y1;
		repaint();
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		repaint();
		x2 = e.getX();
		y2 = e.getY();
		repaint();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		System.out.println("released");
		area.dispos2e(); //schowanie okna
		take(); //przechwycenie wartości areaRect
                //zerowanie areaRect
                areaRect.setBounds(0, 0, 0, 0);
		x1 = 0;
		x2 = 0;
		y1 = 0;
		y2 = 0;
		repaint();
	}
}

Okna nie ma, take() się wykonało. Otwieram ponownie to okno i poprzednio narysowany przez użytkownika prostokąt pozostaje, nie zmienił swojej pozycji na zera, jak był, tak jest.

A System.out.println() w powyższym kodzie wypisuje mi:

java.awt.Rectangle[x=622,y=275,width=212,height=194]
java.awt.Rectangle[x=0,y=0,width=0,height=0]
java.awt.Rectangle[x=622,y=275,width=212,height=194]

Czyli się zmienia, ale coś go przywraca.