Odrysowanie grafiki po zatrzymaniu myszki przy wciśniętym kl

0

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ń...

0

Hm ... w funkcjach obsługi ustawiaj odpowiednie pola, które powiedzą Ci, czy myszka jest kliknięta czy puszczona, gdzie została kliknięta oraz gdzie wskazuje teraz.

Do tego stwórz własny wątek, który będzie chodził cały czas i podejmował decyzję czy, jak i gdzie narysować prostokąt, korzystając ze wspomnianych wcześniej pól.

1 użytkowników online, w tym zalogowanych: 0, gości: 1