如何在Java中的随机绘制图像上添加Mouselistener



我正在Java建立游戏,我需要在游戏中的随机绘制图像中添加一个鼠标。

我使图像每x秒出现在随机位置,当我单击图像时,我想在记分板上添加1点。

我的随机图像添加代码是:

Random rand = new Random();
private int x = 0;
private int y = 0;
Timer timer = new Timer(700, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        x = rand.nextInt(400);
        y = rand.nextInt(330);
        repaint();
    }
});
public void mousePressed (MouseEvent me) {
       // Do something here
       repaint();
     }
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(achtergrond, 0, 0, this.getWidth(), this.getHeight(), null);
    //g.drawImage(muisje, 10, 10, null);
    g.drawImage(muisje, x, y, 100, 100, this);
}

我在Google上看了看,发现我需要与鼠标事件添加一个新课程,但是如何添加?这还不够清楚,因为我只是Java的初学者。

您知道绘制图像的位置(x,y),并且您知道图像的大小(100,100),因此要告诉鼠标是否在图像中,您可以做一些事情这样:

public void mousePressed (MouseEvent me) {
    int clickX = me.getXOnScreen();
    int clickY = me.getYOnScreen();

    if(clickX > x && clickX < x+100 && clickY > y && clickY  < y+100) {
        //the image has been clicked
    }
    repaint();
}

您正在写的课程可以实现MouseListener

编辑评论:

您不需要将代码链接到图像,您所编写的组件应实现鼠标侦听器,因为这要维护状态并知道绘制图像的位置。我将首先查看此链接并实现基本的MouseListener,以打印出鼠标的X和Y坐标。

http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

示例组件实现鼠标侦听器:

public class TestComponent extends JComponent implements MouseListener {
    public TestComponent() {
        this.addMouseListener(this);
    }
    @Override
    public void mouseClicked(MouseEvent e) {
        int clickedX = e.getX();
        int clickedY = e.getY();
        System.out.println("User Clicked: " + clickedX + ", " + clickedY);
    }
    @Override
    public void mousePressed(MouseEvent e) {}
    @Override
    public void mouseReleased(MouseEvent e) {}
    @Override
    public void mouseEntered(MouseEvent e) {}
    @Override
    public void mouseExited(MouseEvent e) {}
}

您需要为Gamevenster类注册MouseListener。而不是让类实现MouseListener,只需使用MouseAdapter即可,您只需要实现方法mouseClicked即可。因此,在您的构造函数中,您像这样

private JLabel scoreLabel = new JLabel("Score: " + score);
private int score = 0;
public Gamevenster() {
    scoreLabel.setFont(new Font("impact", Font.PLAIN, 30));
    scoreLabel.setForeground(Color.WHITE);
    add(scoreLabel);
    addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e) {
            Point p = e.getPoint();
            int clickX = (int)p.getX();
            int clickY = (int)p.getY();
            if(clickX > x && clickX < x + 100 && clickY > y && clickY  < y + 100) {
                score++;
                scoreLabel.setText("Score: " + score);
            }
        }
    });
}

最新更新