2016-04-13 16 views
1

Die Klasse MouseListener, die ich im Code-Segment habe, wird nie aufgerufen, unabhängig von einem Klick. Ich fragte mich, ob ich etwas anderes in meiner Klasse brauchte, da nur der Zuhörer anwesend ist, funktioniert nicht gut für mich.MouseListener Klasse nie aufgerufen?

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

Was macht Sie denken, der Hörer würde jemals irgendwelche Ereignisse erhalten? Nur eine Klasse zu erstellen ist nicht genug. Sie müssen eine Instanz der Listener-Klasse für die Komponente (n) registrieren, von denen Sie möchten, dass diese Instanz Ereignisse empfängt. Sie präsentieren nichts davon. Fehler bei der Registrierung und Registrierung bei der falschen Komponente sind bei weitem die wahrscheinlichsten Gründe dafür, keine Ereignisse zu beobachten. –

Antwort

0

Ist das alles, was Sie haben? Wo ist deine Hauptmethode? Sie implementieren Ihren Maus-Listener nie zu irgendetwas, Sie brauchen eine Komponente und fügen den Maus-Listener hinzu, wie wenn Sie einen JPanel haben

+0

Es gab 2 andere Klassen dazu. Ich habe diesen Listener gewechselt und ihn in eine Panel-Klasse eingefügt, und es funktioniert immer noch nicht. Wo würde ich die Methode .addMouseListener() einfügen? In der ClickListener-Klasse oder in der Panel-Klasse? – DianaMarie0223

+0

Erweitert Ihre Panel-Klasse JPanel? Wenn ja, würden Sie dies tun.addMouseListener() anstatt ein neues JPanel-Objekt zu erstellen. Sobald Sie dies haben, stellen Sie sicher, dass Sie auch den Maus-Listener aufrufen. Können Sie den Rest des Codes bereitstellen? Es wäre viel einfacher, dir zu helfen – Plee

Verwandte Themen