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.