2012-03-14 72 views
1

我不能得到这个MouseListener工作。为什么?当我点击次鼠标MouseListener没有回应

import acm.program.*; 
import acm.graphics.*; 
import java.awt.event.*; 

/** Draws an oval whenever the user clicks the mouse */ 
public class DrawOvals extends GraphicsProgram implements MouseListener { 
    public void run() { 
    addMouseListener(this); 
    } 

    public void mouseClicked(MouseEvent e) { 
    GOval oval = new GOval(100,100,OVAL_SIZE, OVAL_SIZE); 
    oval.setFilled(true); 
    add(oval, e.getX(), e.getY()); 
    System.out.println("Got here!"); 
    } 

    /* Private constants */ 
    private static final double OVAL_SIZE = 20; 

    /* implements the required methods for mouse listener*/ 
    public void mouseEntered(MouseEvent arg0) { 
    // TODO Auto-generated method stub 
    } 

    public void mouseExited(MouseEvent arg0) { 
    // TODO Auto-generated method stub 
    } 
} 
+2

当你说这是行不通的,有什么症状? – Alvin 2012-03-14 00:47:54

+0

mouseClicked方法是否被调用?尝试在方法中添加System.out.println(“Got here!”)以查看。 – 2012-03-14 00:53:27

+0

@罗伊。当我在图形窗口上单击鼠标时,没有任何反应。我按照你的建议做了,也没有打印在控制台上,所以我猜mouseClicked方法没有被调用。 – Dana 2012-03-14 01:02:04

回答

1

根据你在OP的评论中提供的链接,没有任何反应,你必须调用

addMouseListeners(); 

,而不是

addMouseListener(this); 

描述说: : “使用GraphicsProgram本身作为嵌入式GCanvas中发生的鼠标事件的侦听器。为此,所有学生必须做的是定义任何侦听器方法他的程序需要做出响应,然后调用addMouseListeners(),它将该程序注册为MouseListener和MouseMotionListener。“

另一种选择是使用

GCanvas canvas = getGCanvas(); 
canvas.addMouseListener(this); 
+0

谢谢!这工作。 – Dana 2012-03-14 02:20:18