Java 为什么我从MouseAdapter中的getSource方法得到这个错误?
我试图通过使用MouseAdapter将文本Java改为Love Java。鼠标插入时会显示文本Java,鼠标退出时会显示文本Love Java。所以我创建了类MyMouse扩展了MouseAdapter并尝试使用这些方法 但是有一条错误消息,即类型MouseEvent的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
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