java - 使用 MouseListener Java 小程序拖动对象

标签 java applet mouseevent

我正在尝试创建一个在屏幕上绘制一个圆(定义为对象)的小程序,然后可以使用鼠标将该圆拖动到屏幕上。到目前为止,当按下鼠标时,对象就会被绘制并且可以拖动,但我想要它做的是在小程序启动时绘制对象,然后允许用户单击该对象并拖动它。任何帮助或线索将不胜感激。这是代码:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class sheepDog extends Applet implements ActionListener, MouseListener, MouseMotionListener
{
    manAndDog dog;
    int xposR;
    int yposR;

    public void init()
    {
        addMouseListener(this);
        addMouseMotionListener(this);

    }
    public void paint(Graphics g)
    {
        dog.display(g);

    }
    public void actionPerformed(ActionEvent ev)
    {}
    public void mousePressed(MouseEvent e)
    {

    }
    public void mouseReleased(MouseEvent e)
    {


    }
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}
    public void mouseMoved(MouseEvent e)
    {
    }
    public void mouseClicked(MouseEvent e)
    {}
    public void mouseDragged(MouseEvent e)
    {
        dog = new manAndDog(xposR, yposR);
        xposR = e.getX();
        yposR = e.getY();
        repaint();

    }
}

class manAndDog implements MouseListener, MouseMotionListener
{
    int xpos;
    int ypos;
    int circleWidth = 30;
    int circleHeight = 30;
    Boolean mouseClick;

    public manAndDog(int x, int y)
    {
        xpos = x;
        ypos = y;
        mouseClick = true;
        if (!mouseClick){
            xpos = 50;
            ypos = 50;
        }

    }

    public void display(Graphics g)
    {
        g.setColor(Color.blue);
        g.fillOval(xpos, ypos, circleWidth, circleHeight);
    }

    public void mousePressed(MouseEvent e)
    {
        mouseClick = true;
    }
    public void mouseReleased(MouseEvent e)
    {

    }
    public void mouseEntered(MouseEvent e)
    {}
    public void mouseExited(MouseEvent e)
    {}
    public void mouseMoved(MouseEvent e)
    {}
    public void mouseClicked(MouseEvent e)
    {}
    public void mouseDragged(MouseEvent e)
    {
        if (mouseClick){
            xpos = e.getX();
            ypos = e.getY();
        }


    }
}

谢谢

最佳答案

在小程序的 start 方法中,为 manAndDog 对象分配一个位置并调用 repaint

Reimeus 更正确,init 方法是初始化 manAndDog 的更好地方。

希望您不介意一些反馈;)

  1. 您应该在 paint 方法中调用 super.paint(g)。事实上,我鼓励您使用 JApplet 并重写 paintComponent,但这只是我的想法
  2. 我认为没有必要不断重新创建 manAndDog 对象。

例如。如果您添加了方法 setLocation,则只需在拖动鼠标时调用“setLocation”即可。

public void mouseDragged(MouseEvent e) {
    dog.setLocation(xposR, yposR);
    xposR = e.getX();
    yposR = e.getY();
    repaint();
}

这更有效,因为它不会连续创建短暂的对象。这也意味着您可以使用 manAndDog 对象执行更多操作,例如应用动画。恕我直言

关于java - 使用 MouseListener Java 小程序拖动对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118125/

相关文章:

java - 为什么这个小程序有一个 destroy 方法?

javascript - 如何在鼠标悬停时单击 href 链接?

javascript - mouse moveX 如何处理拖动事件?

angular - 为什么 Angular 2 中的自定义组件的单击函数会触发两次

Java swing 组件在 netbeans 之外无法正确显示

java - 在 DB2 中执行触发器时出现错误 SQLCODE -138

java - 为什么有时 Java 不请求新版本的 jar 文件?

java - 如何将这些 JPanel 对齐到周围 JPanel 的底部?

java - 由于括号,程序无法编译

Java 小程序商店安全