2016-04-13 5 views
1

Класс MouseListener, который у меня есть в сегменте кода, никогда не вызывается, независимо от щелчка. Мне было интересно, нужно ли мне что-нибудь еще в моем классе Creature, поскольку только наличие слушателя не подходит для меня.Класс MouseListener никогда не назывался?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class Creature 
{ 
    private static int catchCounter = 0, missCounter = 0;//Used to track the amount of misses and catches 
    //---------------------------------------------------- 
    //Listener class to see if the creature was clicked on 
    //---------------------------------------------------- 
    private class ClickListener implements MouseListener 
    { 
    public void mousePressed(MouseEvent event) 
    { 
     System.out.println("this works"); 
     if (GamePanel.xContainNeg < event.getX() && event.getX() < GamePanel.xContainPos) 
     { 
     if (GamePanel.yContainNeg < event.getY() && event.getY() < GamePanel.yContainPos) 
     { 
      catchCounter++; 
      if (catchCounter == 10) 
      { 
      //Ends game if they won 
      JOptionPane.showMessageDialog(null, "Congratulations! You won!"); 
      GamePanel.timer.stop(); 
      } 
      else 
      { 
      //Continues game if not 
      GamePanel.timer.restart(); 
      GamePanel.stats.setText("Catches: " + catchCounter + " \tMisses: " + missCounter); 
      }     
     } 
     else 
     { 
      missCounter++; 
      if (missCounter == 10) 
      { 
      //Ends game if lost 
      JOptionPane.showMessageDialog(null, "You missed 3 times! You lose!"); 
      GamePanel.timer.stop(); 
      } 
      else 
      { 
      //continues game if not 
      GamePanel.timer.restart(); 
      GamePanel.stats.setText("Catches: " + catchCounter + " \tMisses: " + missCounter); 
      } 
     } 
     } 
     else 
     { 
     missCounter++; 
     if (missCounter == 10) 
     { 
      //ends game if lost 
      JOptionPane.showMessageDialog(null, "You missed 3 times! You lose!"); 
      GamePanel.timer.stop(); 
     } 
     else 
     { 
      //continues game if not 
      GamePanel.timer.restart(); 
      GamePanel.stats.setText("Catches: " + catchCounter + " \tMisses: " + missCounter); 
     } 
     } 
    } 
    //Empty methods 
    public void mouseReleased(MouseEvent event) {} 
    public void mouseClicked(MouseEvent event) {} 
    public void mouseExited(MouseEvent event) {} 
    public void mouseEntered(MouseEvent event) {} 
    } 
} 
+0

Что заставляет вас думать, что слушатель когда-либо получал какие-либо события? Просто создать класс недостаточно. Вы должны зарегистрировать экземпляр класса слушателя на компоненте (-ах), из которого вы хотите, чтобы этот экземпляр принимал события. Вы ничего не представляете. Неспособность зарегистрировать и зарегистрировать неправильный компонент, безусловно, являются наиболее вероятными причинами несоблюдения каких-либо событий. –

ответ

0

Это все, что у вас есть? Где ваш основной метод? Вы никогда не применяете ваш слушатель мыши к чему-либо, вам нужен компонент и добавить слушателя мыши, например, если у вас есть JPanel

JPanel panel = new JPanel(); 
panel.addMouseListener(//*add mouse listener here*//); 
+0

С этим было еще два класса. Я переключил этот слушатель и поместил его в класс Panel, и он все еще не работает. Где бы я поместил метод .addMouseListener()? В классе ClickListener или в классе Panel? – DianaMarie0223

+0

Расширяет ли панель Panel JPanel? Если это так, вы должны сделать this.addMouseListener(), а не создавать новый объект JPanel. После этого убедитесь, что вы также вызываете слушателя мыши. Можете ли вы предоставить остальную часть кода? Было бы намного легче помочь вам – Plee

Смежные вопросы