2012-06-24 41 views
3

我正在編寫遊戲,我的項目結構如下:MouseListener在JLabel中不工作

我們有一個抽象類,所有其他類都從它繼承。

public abstract class Bird extends JLabel implements MouseListener { 
     private static final long serialVersionUID = 1L; 

     private int M_weight; 
     private int M_radius; 
     private long M_bornTime; 
     private int M_maxBirdPower; 
     private BirdState M_birdState; 
     private boolean B_prepareToShoot; 

     public Bird(int weight, int radius, long bornTime, int maxBirdPower, 
       BirdState birdState) { 
      this.M_weight = weight; 
      this.M_radius = radius; 
      this.M_bornTime = bornTime; 
      this.M_maxBirdPower = maxBirdPower; 
      this.M_birdState = birdState; 
      this.B_prepareToShoot = false; 
      this.addMouseListener(this); 
     } 

     public BirdState getBirdState() { 
      return M_birdState; 
     } 
    } 

還有一些類爲RedBird,它繼承自Bird類並實現了抽象函數。

public class RedBird extends Bird { 
     private static final long serialVersionUID = 1L; 

     public RedBird(int weight, int radius, long bornTime, int maxBirdPower, 
       BirdState birdState) { 
      super(weight, radius, bornTime, maxBirdPower, birdState); 
     } 

     @Override 
     public void mouseClicked(MouseEvent arg0) { 
       System.out.println("Clicked"); 
     } 

     @Override 
     public void mouseEntered(MouseEvent arg0) { 
     } 

     @Override 
     public void mouseExited(MouseEvent arg0) { 
     } 

     @Override 
     public void mousePressed(MouseEvent arg0) { 
     } 

     @Override 
     public void mouseReleased(MouseEvent arg0) { 
     } 
    } 

我在JPanel中添加了一個對象從紅鳥級,但是當我在此對象上單擊,MouseListener不起作用。問題是什麼 ?任何人都可以給我一個解決方案。

感謝提前:)

+3

*‘有什麼問題嗎?’*大概佈局和大小。對於WAG以外的內容,請發佈[SSCCE](http://sscce.org/)。 –

+1

@AndrewThompson什麼是WAG? –

+0

你可以發佈你添加'RedBird'到'JPanel'的代碼嗎? – Genzer

回答

5

你還沒有「補充說:」你的鼠標監聽到任何的JComponent。這就是爲什麼它不起作用。 在你的鳥類的構造函數中添加以下代碼:

this.addMousListener(this); 
+0

我加了'this.addMouseListener(this);'在我的鳥類和超類中,但它不工作! :| –

+0

編輯您的問題並將代碼放置在您創建RedBird對象的位置。我在這段代碼中找不到任何錯誤。 – vedant1811