Java 为什么我从MouseAdapter中的getSource方法得到这个错误?

Java 为什么我从MouseAdapter中的getSource方法得到这个错误?,java,Java,我试图通过使用MouseAdapter将文本Java改为Love Java。鼠标插入时会显示文本Java,鼠标退出时会显示文本Love Java。所以我创建了类MyMouse扩展了MouseAdapter并尝试使用这些方法 但是有一条错误消息,即类型MouseEvent的getSource方法未定义。当我搜索它时,这段代码没有任何问题,但我不知道为什么我会收到这个错误消息,当然结果也不起作用 import java.awt.*; import java.awt.event.*; import j

我试图通过使用MouseAdapter将文本Java改为Love Java。鼠标插入时会显示文本Java,鼠标退出时会显示文本Love Java。所以我创建了类MyMouse扩展了MouseAdapter并尝试使用这些方法

但是有一条错误消息,即类型MouseEvent的getSource方法未定义。当我搜索它时,这段代码没有任何问题,但我不知道为什么我会收到这个错误消息,当然结果也不起作用

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MouseEvent extends JFrame{

    MouseEvent(){
        setTitle("Practicing mouse event");
        setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel lb = new JLabel("Java");
        MyMouse mym = new MyMouse();
        lb.addMouseListener(mym);

        lb.setSize(300,100);
        add(lb);
        setSize(400,200);
        setVisible(true);   
    }
    public static void main(String[] args) {
        new MouseEvent();
    }
}

class MyMouse extends MouseAdapter{
    public void mouseEntered(MouseEvent e) {
        JLabel lb = (JLabel)e.getSource();
        lb.setText("Love Java");
    }
    public void mouseExited(MouseEvent e) {
        JLabel lb = (JLabel)e.getSource();
        lb.setText("Java");
    }
}
在public void mouseEnteredMouseEvent e或public void mouseExitedMouseEvent e中使用的MouseEvent对象e应该来自java.awt.event.MouseEvent

但是,正如您将主类命名为MouseEvent一样,在这种情况下,mouseEntered和mouseExited方法中的MouseEvent对象e实际上是主类的对象。这就是它在主类中搜索getSource方法失败的原因

请将主类名更改为MouseeEvent以外的其他名称。例如:

public class MyMouseEvent extends JFrame {

    MyMouseEvent() {
...
...
    public static void main(String[] args) {
        new MyMouseEvent();
...
在public void mouseEnteredMouseEvent e或public void mouseExitedMouseEvent e中使用的MouseEvent对象e应该来自java.awt.event.MouseEvent

但是,正如您将主类命名为MouseEvent一样,在这种情况下,mouseEntered和mouseExited方法中的MouseEvent对象e实际上是主类的对象。这就是它在主类中搜索getSource方法失败的原因

请将主类名更改为MouseeEvent以外的其他名称。例如:

public class MyMouseEvent extends JFrame {

    MyMouseEvent() {
...
...
    public static void main(String[] args) {
        new MyMouseEvent();
...

通过对代码进行以下更改,可以解决此问题:

重命名程序的主类,使其名称与从java库导入的类java.awt.event.MouseEvent的名称不冲突

向mouseEntered和mouseExited方法添加@Override注释以避免编译器警告

在实例化后显示的帧上调用setVisibletrue

以下是具有上述更改的工作示例:

输出:


通过对代码进行以下更改,可以解决此问题:

重命名程序的主类,使其名称与从java库导入的类java.awt.event.MouseEvent的名称不冲突

向mouseEntered和mouseExited方法添加@Override注释以避免编译器警告

在实例化后显示的帧上调用setVisibletrue

以下是具有上述更改的工作示例:

输出:


你有没有在JLabel中“添加”MouseListener?如果不是的话,那就是你遇到麻烦的原因。我像这样添加了MouseListenerJLabel lb=新的JLabelJava;MyMouse mym=新的MyMouse;lb.addmouselistenerm```是否确实导入了java.awt.event.MouseEvent而不是org.w3c.dom.events.MouseEvent?如果同时导入org.w3c.dom.events.MouseEvent;-单类型导入声明优先于按需导入声明(请参阅JLS)。另一种可能是在当前包中有一个类MouseEvent,或者是嵌套的类omg@ThomasKläger,我真的把类名用作MouseEvent…我不知道我在想什么。非常感谢。您是否在JLabel中“添加”了鼠标侦听器?如果不是的话,那就是你遇到麻烦的原因。我像这样添加了MouseListenerJLabel lb=新的JLabelJava;MyMouse mym=新的MyMouse;lb.addmouselistenerm```是否确实导入了java.awt.event.MouseEvent而不是org.w3c.dom.events.MouseEvent?如果同时导入org.w3c.dom.events.MouseEvent;-单类型导入声明优先于按需导入声明(请参阅JLS)。另一种可能是在当前包中有一个类MouseEvent,或者是嵌套的类omg@ThomasKläger,我真的把类名用作MouseEvent…我不知道我在想什么。非常感谢。如果你能解释你所做的更改以及原因,这是一个更好的答案,而不仅仅是提供有效的代码。谢谢,Matt。我用代码中的更改和注释更新了答案。如果您能解释您所做的更改及其原因,这是一个更好的答案,而不仅仅是提供有效的代码。谢谢,Matt。我更新了答案,在代码中描述了更改和注释。
> javac Demo.java

> java Demo