2012-06-24 45 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