2017-12-06 2 views
0

Ich weiß, dass dies schon einmal gefragt wurde, aber überall, wo ich die Frage sehe, ist die Antwort überhaupt nicht hilfreich ... so geht hier.Implementierungsfehler mit mousemovementListener

ich mit dem Buch Learning Java und es gibt ein Beispiel, das wie folgt aussieht:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class HelloJava2 { 
    public static void main(String [] args) { 
     JFrame frame = new JFrame("HelloJava2"); 
     frame.add(new HelloComponent2("Hello, Java!")); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 
    } 
} 

class HelloComponent2 extends JComponent 
    implements MouseMotionListener 
{ 
    String theMessage; 
    int messageX = 125; 
    int messageY = 95; 

    public HelloComponent2(String message) { 
     theMessage = message; 
     addMouseMotionListener(this); 
    } 

    public void paintComponent(MouseEvent e) { 
     // Save the mouse coordinates and paint the message. 
     messageX = e.getX(); 

     messageY = e.getY(); 
     repaint(); 
    } 

    public void mouseMoved(MouseEvent e) { 

    } 
} 

ich es in den Editor eingegeben haben, aber es gibt mir den Fehler:

HelloJava2.java:15: Fehler: HelloComponent2 nicht abstrakt und überschreibt nicht abstrakte Methode mouseDragged (Mouseevent) in Mouse Klasse HelloComponent2 erstreckt JComponent ^ 1 Fehler

Ich bin völlig neu in dieser Sprache, so dass ich völlig verloren bin bei dem, was Umsetzung bedeutet ... jede Hilfe wird sehr geschätzt!

Antwort

1

Das Problem ist, dass Sie vergessen, implementieren Sie eine Methode namens mouseDragged(MouseEvent) der Schnittstelle MouseMotionListener. Sie müssen also nur die Methode umfassen, etwa wie folgt:

class HelloComponent2 extends JComponent 
    implements MouseMotionListener 
{ 
    String theMessage; 
    int messageX = 125; 
    int messageY = 95; 

    public HelloComponent2(String message) { 
    theMessage = message; 
    addMouseMotionListener(this); 
    } 

    public void paintComponent(MouseEvent e) { 
    // Save the mouse coordinates and paint the message. 
    messageX = e.getX(); 

    messageY = e.getY(); 
    repaint(); 
    } 
    //Here it is the method you forgot include in your class 
    @Override 
    public void mouseDragged(MouseEvent e) { 

    } 

    public void mouseMoved(MouseEvent e) { 

    } 
} 
+0

Vielen Dank für die Beantwortung, endete es ist etwas sehr dumm ... up habe ich die Argumente in paintcomponent, die in der nicht vorhandenen mouseDragged sein sollte; (MouseEvent e) statt (Graphics g) ... Ich muss es beim Kopieren übersprungen haben ... Ich brauchte auch nicht den @Override, nicht sicher, was es tut –

+0

Sie sind willkommen @AgustinFitipaldi. Override-Annotation wird empfohlen, die Gründe werden in dieser [Frage] erläutert (https://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why) – JTejedor

Verwandte Themen