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