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);
}
}
Eventos de mouse
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
2 Respostas
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

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