Machen Kreis und bewegen Sie dann einen Kreis auf Maus dragged event

Wie man zeichne einen Kreis auf Maus dragged event, und dann so verschieben, dass der Kreis an der Maus gezogen Veranstaltung in Java?

Mein code ist unten.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class r extends JPanel {

    public int x1, x2, y1, y2, r, w, h,xDist,yDist;
    public static boolean flag = false, pressFlag = false;

    public r() {
        setBackground(Color.WHITE);
        addMouseListener(new MouseAdapter() {

            public void mousePressed(MouseEvent m) {
//               pressFlag = true;
                if (r > (int) Math.sqrt(Math.abs(m.getX() - x1) * Math.abs(m.getX() - x1) + Math.abs(m.getY() - y1) * Math.abs(m.getY() - y1))) {
                    flag = true;
                    yDist=xDist=x2 = y2 = 0;
                } else {
                    x1 = y1 = 0;
                    r=x2 = y2 = 0;
                    x1 = m.getX();
                    y1 = m.getY();
                }
                 repaint();
            }

            public void mouseReleased(MouseEvent m) {
                w = x2 - x1;
                h = y2 - y1;
                r = (int) Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
                flag = false;
            }
        });
        addMouseMotionListener(new MouseMotionAdapter() {

            public void mouseDragged(MouseEvent m) {
                if (flag && (x2!=0 && y2!=0)) {
                    xDist=(m.getX()-x2);
                    yDist=(m.getY()-y2);
                }
                x2 = m.getX();
                y2 = m.getY();

                repaint();
            }
        });
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (flag) {
            x1=x1+xDist;
            y1=y1+yDist;
            g.drawOval(x1, y1, w, h);
        } else {
            g.drawOval(x1, y1, x2 - x1, y2 - y1);
        }

    }
}

public class q extends JFrame {

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.setSize(300, 300);
        jFrame.add(new r());
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
  • Schrecklich Namenskonventionen gibt!
  • ya,aber ich gerade geändert, dass der code so.in meinem ersten code habe ich einen Kreis zeichnen und dann verschieben, der Kreis, die auf Maus dragged event. aber es wird sich nicht bewegen, genau wie in cursor.also, was ich zu tun habe ?
  • Was nicht funktioniert? Ich habe gerade versucht deinen code und es funktioniert.
  • bitte schnell Kreis oder schnell dragg Kreis.und u kann sehen, was ist problem.
  • Sorry, aber selbst wenn ich "schnell" bei beiden Aktionen habe ich keine Probleme. Vielleicht, für eine wirklich kurze Zeit (ein paar millis) die Zeichnung ist nicht "genau" wo mein Mauszeiger ist, aber sobald ich langsamer, holt einen alles und die Anzeige ist wieder korrekt.
  • Ist dieses Hausaufgaben? Wenn es so ist, dann sollten Sie tag es so.

InformationsquelleAutor Jay | 2012-05-24
Schreibe einen Kommentar