简体   繁体   English

如果不拖动鼠标移动鼠标,如何在画布周围移动2d图形

[英]How do I move a 2d graphic around a canvas when the mouse is moved not dragged

Please I am working on a problem to draw a 2d graphic in java but I would want the drawing to be moved when the mouse is MOVED, not dragged.You know, as the mouse moves over the canvas the graphic with be moving too. 请问我正在研究在java中绘制2d图形的问题,但我希望在鼠标移动时移动绘图,而不是拖动。你知道,当鼠标在画布上移动时,图形也会移动。 How do I do this? 我该怎么做呢?

  import java.awt.Cursor;
  import java.awt.Graphics;
  import java.awt.Graphics2D;
  import java.awt.Image;
  import java.awt.Point;
  import java.awt.PointerInfo;
  import java.awt.Toolkit;
  import java.awt.event.MouseEvent;
  import java.awt.event.MouseListener;
  import java.awt.event.MouseMotionListener;
  import java.awt.geom.QuadCurve2D;
  import java.awt.geom.Rectangle2D;
  import java.awt.image.BufferedImage;
  import java.awt.image.MemoryImageSource;

  public class Pointer2QuadCurve extends javax.swing.JFrame {

     private javax.swing.JPanel jPanel1;
     double x1;
     double y1;

  public Pointer2QuadCurve() {
    initComponents();
    jPanel1.addMouseListener(new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent e) {

        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            int[] pixels = new int[16 * 16];
            Image image = Toolkit.getDefaultToolkit().createImage(
                    new MemoryImageSource(16, 16, pixels, 0, 16));
            Cursor transparentCursor
                    = Toolkit.getDefaultToolkit().createCustomCursor(image, new Point(0, 0), "invisibleCursor");
            //paintWithPointer(getGraphics());
            setCursor(transparentCursor);
        }

        @Override
        public void mouseExited(MouseEvent e) {

        }
    });
    jPanel1.addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseDragged(MouseEvent e) {

        }

        @Override
        public void mouseMoved(MouseEvent e) {
            //Point p = getMousePosition();
            x1 = e.getX();
            y1 = e.getY();
            jPanel1.repaint();
        }
    });
}



private void initComponents() {

    jPanel1 = new javax.swing.JPanel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 300, Short.MAX_VALUE)
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

    pack();
}                       


public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info :   javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
         java.util.logging.Logger.getLogger(Pointer2QuadCurve.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(Pointer2QuadCurve.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(Pointer2QuadCurve.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(Pointer2QuadCurve.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Pointer2QuadCurve().setVisible(true);
        }
    });
}


public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    // draw Rectangle2D.Double
    g2d.draw(new Rectangle2D.Double(x1, y1,
            Math.random() + 10,
            Math.random() + 15));
}

} }

  • Add a MouseMotionListener to the custom painted component. MouseMotionListener添加到自定义绘制的组件。
  • Listen for the mouseMoved event. 侦听mouseMoved事件。
  • Get the Point from the MouseEvent . MouseEvent获取Point
  • Draw the shape at the Point . Point处绘制形状。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM