Mam taki problem. Na JPanelu, umieszczam sobie JLabela, do którego wstawiam sobie czarno-białe zdjęcie (setIcon). Program działa w ten sposób, że znajduje sobie min i max x-a i y-ka, a po ludzku granice czarnego elementu na białym tle i rysuje sobie te granice. Istnieje jednak w programie również ręczna możliwość zaznaczenia pewnej części zdjęcia za pomocą myszki. Oczywiście dzieje się to w ten sposób, że po naciśnięciu przycisku myszki i poruszeniu jej, program rysuje prostokąt-granice, poczynając od miejsca wciśnięcia lewego przycisku myszki, a kończą na aktualnej pozycji(przeciwległy wierzchołek, zaznaczenie obszaru po prostu jak w każdym innym programie graficznym typu paint). Program rysuje dynamicznie obszar przy wciśniętym przycisku, a po jego puszczeniu rysuje prostokąt na zdjęciu na stałe. Problem (w końcu dochodze do sedna :-) ) polega na tym, że po pierwsze primo rysuje dość ślamazarnie tzn. tak skokowo jabky, a po drugie secundo najważniejsze jeśli mamy wciśnięty przycisk a zatrzymamy ruch myszki to rysowany prostokąt zniknie!!! bo w końcu metoda mouseDragged obsługuje zdarzenie przy ruchu myszki równoczesnym przyciskaniu klawisza, a nie samym trzymaniu przycisku, a chodzi o to że w tym momencie musi odrysować prostokąt bo właśnie o precyzje chodzi tego zaznaczenia, a prostokąta ni ma. Do powyższego myku używam oczywiście moseDragged i mouseReleased itd., ale nie ma metody mouseStopped... Ma ktoś pomysł jak to zrobić??? Poniżej trochę kodu dla rozjaśnienia.
public void mouseDragged(java.awt.event.MouseEvent e) {
jLabel29.repaint();
g2 = (java.awt.Graphics2D)jLabel29.getGraphics();
x3 = e.getX();
y3 = e.getY();
setBands(); //rysuje ta ogólną obwódkę, bez znaczenia dla mojego problemu
g2.setPaint(java.awt.Color.gray);
if(!(jLabel29.getIcon()==null))
g2.drawRect(x1,y1,(x3-x1),(y3-y1)); tutaj rysujemy nasze zaznaczenie
jTextField19.setText(Integer.toString(x3) + "," + Integer.toString(y3));
jTextField23.setText(Integer.toString(x3) + "," + Integer.toString(y3));
}
Cudowałem też oczywiście różne rzeczy z mousePressed i umieszczałem tam odpowiedni kod, ale jak już się zacznie wykonywać obrys to jak by się program zawieszał w tym mouseDragged i żadna inna mu podobna metoda nie może do momentu puszczenia przycisku obsługiwać zdarzeń...