Eventos de mouse

2 respostas
D
Oi estou estudando java e gostaria de uma ajuda quero desenhar usando o mouse igual no paint do windows tenho este código que desenha retas mais estou tentando construir a função do lápis neste estilo podem me ajudar
public class JPanelDesenho extends JPanel {    
    
    private BufferedImage bufferedImage;//buffer    
    private BufferedImage bufferedReta;    
    private int x; //usado para gravar a posiçao do clike    
    private int y;    
    
    public JPanelDesenho() {    
        super(false);//bufferstrategy '2', acelera a atualizaçao da imagem    
        int width = 800;    
        int height = 600;    
        bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// cria um buffer com o tamanho    
        bufferedReta = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // auxiliar para reta    
            
        //inicializar com funddo branco    
        Graphics gi = bufferedImage.createGraphics();    
        gi.setColor(Color.WHITE); //seleciona cor de fundo    
        gi.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());//pinta tudo com a cor selecionada  
        gi.fillOval(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());  
        gi.dispose();    
    
        Graphics gr = bufferedReta.createGraphics();    
        gr.setColor(Color.WHITE); //seleciona cor de fundo    
        gr.fillRect(0, 0, bufferedReta.getWidth(), bufferedReta.getHeight());//pinta tudo com a cor selecionada    
        gr.fillOval(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());  
        gr.dispose();    
    
        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.fillOval(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());  
        //g.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());//pinta tudo com a cor selecionada    
        g.drawImage(bufferedReta, 0, 0, null);//pinta com a reta      
        g.dispose();    
    }   
    
    private class AcaoMouse implements MouseListener, MouseMotionListener {    
            
        public void mouseClicked(MouseEvent e) {    
            x = e.getX();    
            y = e.getY();    
            pinta(e.getX(), e.getY());    
            updateUI();//Atualiza a imagem do jpanel    
        }    
    
        public void mousePressed(MouseEvent e) {    
            x = e.getX();    
            y = e.getY();    
            pinta(e.getX(), e.getY());    
            updateUI();//Atualiza a imagem do jpanel    
        }    
    
        public void mouseReleased(MouseEvent e) {    
            pinta(e.getX(), e.getY());    
            Graphics gDaImagem = bufferedImage.createGraphics();//pega o g da imagem    
            gDaImagem.drawImage(bufferedReta, 0, 0, null);//desenha a reta final na imagem    
            gDaImagem.dispose();    
    
            updateUI();    
        }    
    
        public void mouseEntered(MouseEvent e) {    
        }    
    
        public void mouseExited(MouseEvent e) {    
        }    
    
        public void mouseDragged(MouseEvent e) {    
            pinta(e.getX(), e.getY());    
            updateUI();   
        }    
    
        public void mouseMoved(MouseEvent e) {    
        }    
    
        private void pinta(int mx, int my) {    
            Graphics gDaReta = bufferedReta.createGraphics();    
            gDaReta.drawImage(bufferedImage, 0, 0, null); //desenha a imagem gravada    
            gDaReta.setColor(Color.RED);//seta a cor da reta    
            //gDaReta.drawLine(x, y, mx, my);  
            gDaReta.drawOval(x, y, my, my);  
            gDaReta.dispose();    
        }    
    }    
    
    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);    
    }    
}

2 Respostas

MarkKnopfler

O pulo-do-gato está no método pinta(), ele está com o código relativo à função que vc quer. Cabe a vc identificar a função selecionada no seu programa e executar um código de pintura diferente para círculos, retas, etc.

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

public class JPanelDesenho extends JPanel {      
      
    private BufferedImage bufferedImage;//buffer      
    private BufferedImage bufferedReta;      
    private int x; //usado para gravar a posiçao do clike      
    private int y;      
      
    public JPanelDesenho() {      
        super(false);//bufferstrategy '2', acelera a atualizaçao da imagem      
        int width = 800;      
        int height = 600;      
        bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// cria um buffer com o tamanho      
        bufferedReta = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // auxiliar para reta      
              
        //inicializar com funddo branco      
        Graphics gi = bufferedImage.createGraphics();      
        gi.setColor(Color.WHITE); //seleciona cor de fundo      
        gi.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());//pinta tudo com a cor selecionada    
        gi.fillOval(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());    
        gi.dispose();      
      
        Graphics gr = bufferedReta.createGraphics();      
        gr.setColor(Color.WHITE); //seleciona cor de fundo      
        gr.fillRect(0, 0, bufferedReta.getWidth(), bufferedReta.getHeight());//pinta tudo com a cor selecionada      
        gr.fillOval(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());    
        gr.dispose();      
      
        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.fillOval(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());    
        //g.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());//pinta tudo com a cor selecionada      
        g.drawImage(bufferedReta, 0, 0, null);//pinta com a reta        
        g.dispose();      
    }     
      
    private class AcaoMouse extends MouseAdapter {      
              
        public void mousePressed(MouseEvent e) {      
            x = e.getX();      
            y = e.getY();      
            pinta(e.getX(), e.getY());      
            updateUI();//Atualiza a imagem do jpanel      
        }      
      
        public void mouseDragged(MouseEvent e) {   
            pinta(e.getX(), e.getY());      
            updateUI();     
        }      
      
        private void pinta(int mx, int my) {      
            Graphics gDaReta = bufferedReta.createGraphics();      
            gDaReta.setColor(Color.RED);//seta a cor da reta      
            gDaReta.drawLine(x, y, mx, my);    
            x = mx;
            y = my;
            gDaReta.dispose();      
        }      
    }      
      
    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);      
    }      
}
D

Obrigado ajudou bastante :smiley: :smiley: :smiley:

agora eu estou tentando abrir um arquivo
e colocar esta mesma neste mesmo JFrame
mais a imagem não aparece
pode me ajudar? :?: :?:

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class AbrirArquivo  implements ActionListener {

    String nomeArquivo;
    JFileChooser selecionado;
    int resultado;
    File arquivo;
    BufferedImage AbrirImagem;
    JLabel aux;

    public AbrirArquivo() 
    {
        aux = new JLabel();
        nomeArquivo = "";
        selecionado = new JFileChooser();
        resultado = 0;
        AbrirImagem= new BufferedImage(900, 900, BufferedImage.TYPE_INT_RGB);// cria um buffer com o tamanho 

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        selecionado.setDialogTitle("Selecionar a imagem");//titulo caixa 
        resultado = selecionado.showOpenDialog(null);//resulado recebe um valor inteiro
        if (resultado == selecionado.APPROVE_OPTION) //se  abrir 
        {
            arquivo = selecionado.getSelectedFile();
            nomeArquivo = selecionado.getName(arquivo);  
            try
            {
               AbrirImagem = ImageIO.read(arquivo);
               
              Graphics gImagem  =   AbrirImagem.createGraphics();//pega o g da imagem  
              gImagem.drawImage( AbrirImagem  , 0, 0, null);//desenha a reta final na imagem  
               
  
            } catch (IOException ex) {
                Logger.getLogger(AbrirArquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else// se não abrir 
        {
            JOptionPane.showMessageDialog(selecionado, "Nenhuma imagem selecionada ", " Atenção", 2);
        }

    }
}
Criado 12 de novembro de 2012
Ultima resposta 13 de nov. de 2012
Respostas 2
Participantes 2