mouse motion listener only in one direction

后端 未结 4 933
粉色の甜心
粉色の甜心 2020-12-07 00:28

i have been working on mouse motion listener in Java couldn\'t sort it out completely because i want the object to move towards the direction where ever on the screen the mo

4条回答
  •  悲哀的现实
    2020-12-07 00:45

    This:

      if (xpos < 0) {
    

    means "if the cursor is outside of the panel".

    This:

      xpos = getX();
    

    does not get a mouse coordinate.

    Change your event to something like this:

    public void mouseMoved(MouseEvent e) {
        xpos = e.getX();
        if (xpos < getWidth() / 2) {
            polyrot--;
        } else {
            polyrot++;
        }
        repaint();
    }
    

    Now it rotates counter-clockwise if the cursor is on the left side of the panel and clockwise if the cursor is on the right side.

    This:

      g2d.draw(poly);
      g2d.translate(width / 2, height / 2);
      g2d.rotate(Math.toRadians(polyrot));
      g2d.scale(5, 5);
    

    will not do anything to change the image because you are doing your transforming after drawing it.

    This:

      Graphics2D g2d = (Graphics2D) g;
    

    is a bad idea because you are applying transforms to the global graphics context which would carry on to subsequent repaints of other components.

    Change your paint to something like this:

    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g.create();
        width = getSize().width;
        height = getSize().height;
        g2d.setColor(Color.BLACK);
        g2d.fillRect(0, 0, width, height);
        g2d.translate(width / 2, height / 2);
        g2d.rotate(Math.toRadians(polyrot));
        g2d.scale(5, 5);
        g2d.setColor(Color.RED);
        g2d.draw(poly);
        g2d.dispose();
    }
    

    Further reading:

    • Painting in AWT and Swing
    • How to Write a Mouse Listener

提交回复
热议问题