Desenhar no JPanel quando clicar

Fala pessoal beleza?

Seguinte, não estou conseguindo desenhar um ponto no JPanel quando eu clicar com o mouse. A intenção é desenhar o ponto exatamente onde eu clico!

Alguém pode me dar uma luz pelo amor de deus? kkkkkkkk

Abraços…

Posta aí o que vc já fez e onde está com dificuldade, fica mais fácil te ajudar…

Seu problema pode ser resolvido em duas etapas:

  1. No evento de clique, armazene a coordenada sobre a qual o usuário clicou;
  2. Redefina o evento paintComponent() do seu JPanel, e dentro deste evento use a coordenada armazenada no primeiro passo para desenhar o ponto no lugar certo.

Seguem um exemplo e um artigo ilustrando a técnica:
http://www.java2s.com/Code/JavaAPI/javax.swing/JPanelpaintComponentGraphicsg.htm
http://java.sun.com/products/jfc/tsc/articles/painting/

Só um alerta: no exemplo contido no primeiro link, o método redefinido paintComponent() deveria chamar o método paintComponent() da classe ancestral, mas não está fazendo isso. Certifique-se de fazer essa chamada logo no início do método redefinido:

public void paintComponent(Graphics g) { super.paintComponent(g); // ... Seu código aqui ... }

[code]import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class JPanelDesenho extends JPanel {

private BufferedImage bufferedImage;//buffer

public JPanelDesenho() {
    super(true);//bufferstrategy '2', acelera a atualizaçao da imagem
    int width = 800;
    int height = 600;
    bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);// cria um buffer com o tamanho e o tipo definido, outro tipo comum BufferedImage.TYPE_INT_RGB
    addMouseListener(new AcaoMouse());//acao de clike
    addMouseMotionListener(new AcaoMouse());//acao de arrastar (drag)
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.WHITE); //seleciona cor de fundo
    g.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());//pinta tudo com a cor selecionada
    g.drawImage(bufferedImage, 0, 0, null); // pinta o jpanel com o buffer
    g.dispose();
}

private class AcaoMouse implements MouseListener, MouseMotionListener {

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        pinta(e.getX(), e.getY());
    }

    public void mouseReleased(MouseEvent e) {
        pinta(e.getX(), e.getY());
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mouseDragged(MouseEvent e) {
        pinta(e.getX(), e.getY());
    }

    public void mouseMoved(MouseEvent e) {
    }

    private void pinta(int x, int y) {
        Graphics gDoBuffer = bufferedImage.createGraphics();//pega o graphics do buffer para edicao
        gDoBuffer.setColor(Color.BLACK); //seta a cor do pincel
        gDoBuffer.fillRect(x, y, 1, 1); //desenha um ponto
        gDoBuffer.dispose();
        updateUI();//atualiza o jpanel, ou seja, "diz ao jpanel q seu desenho foi atualizado e vc qé q seja exibido"
    }

}

public static void main(String[] args) {
    //Teste
    JFrame jFrame = new JFrame();
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanelDesenho desenho = new JPanelDesenho();
    desenho.setPreferredSize(new Dimension(800, 600));
    jFrame.getContentPane().add(desenho);
    jFrame.setResizable(false);
    jFrame.pack();
    jFrame.setVisible(true);
}

}[/code]

De uma lida nesses links pois sao muito interessantes
informaçao de como desenhar retas
http://www.guj.com.br/java/236416-desenhando-com-o-mouse-em-java#1219613

pessoal eu estava implementando o algoritmo de desenhar reta a tarde por isso nao voltei aqui, desculpa… Consegui colocar para ele desenhar no evento onmousedragged do jpanel e ele desenha que é uma beleza!!! só que o problema eh que ele desenha várias retas uma sobreposta a outra e se eu colocar PDesenho.repaint(); ele nao desenha nada!!! alguem pode me ajudar?

private void PDesenhoMouseDragged(java.awt.event.MouseEvent evt) { if(tipoDesenho == 1){ reta.drawReta(PDesenho.getGraphics(), xy, evt.getPoint()); //PDesenho.repaint(); } }

Obrigado…

O método correto para você fazer o seu desenho é JPanel.paintComponent(). Usando as técnicas que descrevi alguns há posts e o código de exemplo postado pelo ChronosSage, você conseguirá o resultado desejado.

Ok, desculpa, mas sendo curto e grosso…

Se eu fize essa modificação irá resolver meu problema quando eu limpar o jpanel? rssss… só isso eu quero saber… Eu acho que não, mas vou tentar utilizar isso…

Abraço…

OLA PESSOAL!

EU ESTOU DESENVOLVENDO UM CÓDIGO DE DESENHO DE MOUSE NESSE ESTILO AI, MAS ESTOU COM DIFICULDADES EM POR UMA IMAGEM COMO FUNDO.

ALGUÉM PODE ME AJUDAR COM ISSO?!