2012-03-14 3 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

+0

Вызывается метод mouseClicked? Попробуйте поместить System.out.println («Got here!») В методе, чтобы видеть. –

+0

@Roy. Когда я нажимаю кнопку мыши на графическом окне, ничего не происходит. Я сделал так, как вы предлагали, и ничего не печатается на консоли, поэтому я думаю, что метод mouseClicked не получает вызов. – Dana

ответ

1

По ссылке вы предоставили в комментариях в OP, вы должны вызвать

addMouseListeners(); 

вместо

addMouseListener(this); 

Описание говорит : «Используйте сам GraphicsProgram в качестве слушателя для событий мыши, которые происходят во встроенном GCanvas. Для этого все, что должен сделать студент, это определить любые методы прослушивателя, к которым t он должен ответить, а затем вызвать addMouseListeners(), который регистрирует программу как MouseListener и MouseMotionListener. "

Другой вариант заключается в использовании

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

спасибо! Это сработало. – Dana