2

私は、プロジェクトの構造が次のようなゲームをプログラミングしています:

他のすべてが継承される抽象クラスがあります。

    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;
        }
    }

また、Bird クラスを継承し、抽象関数を実装する RedBird などのクラスもあります。

    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 で RedBird クラスからオブジェクトを追加しましたが、このオブジェクトをクリックしてMouseListenerも機能しません。何が問題ですか ?誰でも私に解決策を教えてもらえますか。

前もって感謝します :)

4

1 に答える 1

5

マウスリスナーを JComponent に「追加」していません。それが機能していない理由です。バード クラスのコンストラクターに次のコードを追加します。

this.addMousListener(this);
于 2012-06-24T14:03:21.130 に答える