java - mouseEntered() 和 mouseMoved() 之间的混淆

标签 java swing event-handling applet mouseevent

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

public class MouseEvents extends Applet implements MouseListener, MouseMotionListener
{
    String msg = "";                        // I am not implementing those methods which
    int mouseX = 0, mouseY = 0;             // are not related to my question

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

    public void mouseEntered(MouseEvent me)
    {
        mouseX = 0;
        mouseY = 10;
        msg = "Mouse Entered";
        repaint();
    }

    public void mouseMoved(MouseEvent me)
    {
        mouseX = me.getX();
        mouseY = me.getY();
        showStatus("Moving mouse at "+mouseX+", "+mouseY);
    }

    public void paint(Graphics g)
    {
        g.drawString(msg, mouseX, mouseY);
    }
}

我的小程序窗口的坐标:

Upper left corner - (0, 0)
Lower left corner - (0, 199)
Upper right corner - (349, 0)
Lower right corner - (349, 199)

我的期望:

  1. 当鼠标进入小程序窗口时,应在坐标 (0, 10)

    处显示消息 "Mouse Entered"
  2. 当鼠标移动时,状态窗口中应显示消息“Moving mouse at mouseX, mouseY”。其中mouseXmouseY为鼠标当前坐标

实际发生了什么:

消息 “鼠标进入” 没有显示在坐标 (0, 10) 处,而是显示在鼠标进入的初始坐标处小程序窗口***

例如,鼠标从左下角右下角之间进入小程序窗口,比如说(187, 199),然后消息 "Mouse Entered" 不是显示在 (0, 10),而是显示在 (187, 199)/p>

我的问题

尽管在 mouseEntered() 中指定了 mouseX = 0mouseY = 10,为什么消息 “Mouse Entered “ 显示在鼠标进入小程序窗口的坐标处,而不是坐标 (0, 10) 处?

最佳答案

当您将鼠标移到查看 Pane 上时,查看 Pane 会经常重绘。

您正在此处覆盖 mouseXmouseY 的值:

public void mouseMoved(MouseEvent me)
{
    mouseX = me.getX();
    mouseY = me.getY();
    showStatus("Moving mouse at "+mouseX+", "+mouseY);
}

这会导致在您移动鼠标时在这些坐标处进行重绘。如果您希望 mouseEntered 不移动,您可以使用局部变量,例如

public void mouseMoved(MouseEvent me)
{
    int currentMouseX = me.getX();
    int currentMouseY = me.getY();
    showStatus("Moving mouse at "+currentMouseX+", "+currentMouseY);
}

关于java - mouseEntered() 和 mouseMoved() 之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31391869/

相关文章:

Java Session失效和超时不起作用

java - TableCellEditor 类不起作用

Java 更改 GridLayout 内的 JTextField 大小

javascript - 了解 window.event 属性及其用法

JavaScript 范围澄清

java - 如何修复文件 .json 存在时未找到的问题

java - 如何从文本字符串中删除字符

java - "SQLITE Full"异常

java - 没有检查 JCheckBox 就触发了 MouseListener

java - Android:在Activity中触发onCreate事件