MouseEvent

Pessoal, estou tentando desenhar um retâgulo toda vez que eu clicar qualquer um dos botões do mouse.
Tentei de duas formas(cor verde), mas não tive sucesso. Se tiver alguém que possa me ajudar eu agradeço.

Obrigada.

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Questao2 extends Applet
        implements MouseListener, MouseMotionListener {

    int clickx, clicky;
    int pressx, pressy;
    int releasex, releasey;
    int enterx, entery;
    int exitx, exity;
    int dragx, dragy;
    int movex, movey;
    int mousebutton;

    public void init() {
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    public void paint(Graphics g) {
        g.drawString("Mouse clicked " + mousebutton + " at " + clickx + "," + clicky, 10, 10);
        g.drawString("Mouse entered at " + enterx + "," + entery, 10, 25);
        g.drawString("Mouse exited at " + exitx + "," + exity, 10, 40);
        g.drawString("Mouse pressed " + mousebutton + " at " + pressx + "," + pressy, 10, 55);
        g.drawString("Mouse released " + mousebutton + " at " + releasex + "," + releasey, 10, 70);
        g.drawString("Mouse dragged at " + dragx + "," + dragy, 10, 85);
        g.drawString("Mouse moved at " + movex + "," + movey, 10, 100);
    }
    private void checkButton(MouseEvent e) {
            switch(e.getButton()) {
            case MouseEvent.BUTTON1:
                mousebutton = 1;
                break;
            case MouseEvent.BUTTON2:
                mousebutton = 2;
                break;
            case MouseEvent.BUTTON3:
                mousebutton = 3;
                break;
            default:
                mousebutton = 0;
            }
    }
    /*private void draw(Graphics g,MouseEvent e)
    {
    	switch(mousebutton)
    	{
    	case 1:
    	case 2:
    	case 3:
    		g.setColor(Color.RED);
    		g.fillRect(e.getX(),e.getY(),4,4);
    	}
    }*/
    public void mouseClicked(MouseEvent e) {
        clickx = e.getX();
        clicky = e.getY();

        checkButton(e);
        repaint();
    }
    public void mouseEntered(MouseEvent e) {
        enterx = e.getX();
        entery = e.getY();
        repaint();
    }
    public void mouseExited(MouseEvent e) {
        exitx = e.getX();
        exity = e.getY();
        repaint();
    }
    public void mousePressed(MouseEvent e/*,Graphics g*/) {
        pressx = e.getX();
        pressy = e.getY();
        checkButton(e);
        repaint();
        
        /*switch(e.getButton())
        {
        case MouseEvent.BUTTON1:
        case MouseEvent.BUTTON2:
        case MouseEvent.BUTTON3:
        	g.setColor(Color.RED);
        	g.fillRect(e.getX(),e.getY(),4,4);
        	repaint();
        	break;
        }*/
    }
    public void mouseReleased(MouseEvent e) {
        releasex = e.getX();
        releasey = e.getY();
        checkButton(e);
        repaint();
    }
    public void mouseDragged(MouseEvent e) {
        dragx = e.getX();
        dragy = e.getY();
        repaint();
    }
    public void mouseMoved(MouseEvent e) {
        movex = e.getX();
        movey = e.getY();
        repaint();
    }
}

Consegui!!! Não sei se é a melhor forma, mas por enquanto tá bom.

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Questao2 extends Applet
        implements MouseListener, MouseMotionListener {

    int clickx, clicky;
    int pressx, pressy;
    int releasex, releasey;
    int enterx, entery;
    int exitx, exity;
    int dragx, dragy;
    int movex, movey;
    int mousebutton;

    public void init() {
        addMouseListener(this);
        addMouseMotionListener(this);
    }
    public void paint(Graphics g) {
        g.drawString("Mouse clicked " + mousebutton + " at " + clickx + "," + clicky, 10, 10);
        g.drawString("Mouse entered at " + enterx + "," + entery, 10, 25);
        g.drawString("Mouse exited at " + exitx + "," + exity, 10, 40);
        g.drawString("Mouse pressed " + mousebutton + " at " + pressx + "," + pressy, 10, 55);
        g.drawString("Mouse released " + mousebutton + " at " + releasex + "," + releasey, 10, 70);
        g.drawString("Mouse dragged at " + dragx + "," + dragy, 10, 85);
        g.drawString("Mouse moved at " + movex + "," + movey, 10, 100);
		
		g.setColor(Color.PINK);
		g.fillRect(pressx,pressy,4,4);
    }
    private void checkButton(MouseEvent e) {
            switch(e.getButton()) {
            case MouseEvent.BUTTON1:
                mousebutton = 1;
                break;
            case MouseEvent.BUTTON2:
                mousebutton = 2;
                break;
            case MouseEvent.BUTTON3:
                mousebutton = 3;
                break;
            default:
                mousebutton = 0;
            }
    }
    public void mouseClicked(MouseEvent e) {
        clickx = e.getX();
        clicky = e.getY();
        checkButton(e);
        repaint();
    }
    public void mouseEntered(MouseEvent e) {
        enterx = e.getX();
        entery = e.getY();
        repaint();
    }
    public void mouseExited(MouseEvent e) {
        exitx = e.getX();
        exity = e.getY();
        repaint();
    }
    public void mousePressed(MouseEvent e) {
        pressx = e.getX();
        pressy = e.getY();
        checkButton(e);
        repaint();
    }
    public void mouseReleased(MouseEvent e) {
        releasex = e.getX();
        releasey = e.getY();
        checkButton(e);
        repaint();
    }
    public void mouseDragged(MouseEvent e) {
        dragx = e.getX();
        dragy = e.getY();
        repaint();
    }
    public void mouseMoved(MouseEvent e) {
        movex = e.getX();
        movey = e.getY();
        repaint();
    }
}

Algumas dicas:

  1. Hoje em dia, recomenda-se usar a classe JApplet (do Swing) e não Applet (da AWT);

  2. É recomendado que você faça a cópia do objeto Graphics antes de altera-lo:

public void paint(Graphics graphics) { Graphics2D g = (Graphics2D) graphics.create(); //Copia o graphics g.drawString("Mouse clicked " + mousebutton + " at " + clickx + "," + clicky, 10, 10); g.drawString("Mouse entered at " + enterx + "," + entery, 10, 25); g.drawString("Mouse exited at " + exitx + "," + exity, 10, 40); g.drawString("Mouse pressed " + mousebutton + " at " + pressx + "," + pressy, 10, 55); g.drawString("Mouse released " + mousebutton + " at " + releasex + "," + releasey, 10, 70); g.drawString("Mouse dragged at " + dragx + "," + dragy, 10, 85); g.drawString("Mouse moved at " + movex + "," + movey, 10, 100); g.setColor(Color.PINK); g.fillRect(pressx,pressy,4,4); g.dispose(); //Libera a cópia }

Isso vai garantir que comandos como o setColor não estraguem outros trechos do seu código.

Valeu pela dica Vini.
Eu estou estudando o livro PROGRAMAÇÃO DE GAMES COM JAVA(Jonathan S. Harbour) e lá usa Applet, quando eu terminar esse livro, vou passar a usar JApplet.

Pois é, os livros de programação de game estão precisando urgentemente de uma segunda edição.

Tanto esse, quanto o Developing Games in Java do Brackeen e o Killer Game Programming in Java do Andrew Davidson ainda usam Java 4 e classes antigas como o Applet, ImageIcon e AudioClip. Hoje já há substitutos melhores.

No meu site, o Ponto V!, tem vários tutoriais sobre desenvolvimento de jogos em Java. Passe por lá e dê uma lida! :slight_smile: