javaappletawtkeylistenermouse-listeners

Java image following my cursor


I'd like to make something similar to a cursor, ( I get no errors ) So basically I get the coordinates once I enter the applet, and based on them I have my image drawn. Here's the code... Can you please tell me where I'm wrong ? Thanks

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;

public class Z_applets extends Applet implements 
        KeyListener, MouseListener, MouseMotionListener {

    int z = 100;
    int t = 100;
    // boolean gigel = true;
    //----------------- Images
    Image image;
    //-----------------
    //----------------- Mouse Coordinates
    Point p = null;
    int x;
    int y;
    //----------------------------------
    Color color = Color.GREEN;

    public void init() {
        addKeyListener(this);
        addMouseListener(this);
    }

    public void paint(Graphics g) {
        setBackground(Color.BLACK);
        g.setColor(color);
        g.drawImage(image, x, y, this);
        g.fillOval(z, t, 15, 15);
    }

    public void update(Graphics g) {
        paint(g);
    }

    public void loadImage() {
//URL url = getClass().getResource("borat.jpg"); 
//image = getToolkit().getImage(url);
        try {
            URL url = new URL(getCodeBase(), "trollface.png");
            System.out.println(getCodeBase());
            image = ImageIO.read(url);
        } catch (IOException e) {
            System.out.println("error" + e.getMessage());
        }
    }

    @Override
    public void keyTyped(KeyEvent ke) {
    }

    @Override
    public void keyPressed(KeyEvent ke) {
        char option;
        option = ke.getKeyChar();
        switch (option) {
            case 'w': {
                t--;
                repaint();
                break;
            }
            case 's': {
                t++;
                repaint();
                break;
            }
            case 'a': {
                z--;
                repaint();
                break;
            }
            case 'd': {
                z++;
                repaint();
                break;
            }
            case '1': {
                color = Color.GREEN;
                break;
            }

            case '2': {
                color = Color.RED;
                break;
            }

            case '3': {
                color = Color.YELLOW;
                break;
            }
//            case 'r':
//            {
//                loadImage();
//                repaint();
//                break;
//            }
        }
    }

    @Override
    public void keyReleased(KeyEvent ke) {
    }

    @Override
    public void mouseClicked(MouseEvent me) {
//    p = me.getPoint();
//    x = p.x;
//    y = p.y;
//    repaint();       
    }

    @Override
    public void mousePressed(MouseEvent me) {
    }

    @Override
    public void mouseReleased(MouseEvent me) {
    }

    @Override
    public void mouseEntered(MouseEvent me) {
        // p=me.getPoint();
        //-------Debug--------
        System.out.println(p);
        System.out.println(p.x);
        System.out.println(p.y);
        //----------------------
        // x = p.x;
        //  y = p.y;
        //  repaint();
    }

    @Override
    public void mouseExited(MouseEvent me) {
    }

    @Override
    public void mouseDragged(MouseEvent me) {
    }

    @Override
    public void mouseMoved(MouseEvent me) {
        p = me.getPoint();
        x = p.x;
        y = p.y;
        repaint();
    }
}

Solution

  • Without knowing what problem you have exactly, I suppose the image isn't being moved. I looks you don't register a MouseMotionListener so do that and implement the mouseMoved method.