Boa tarde,
Criei um código mas não estou conseguindo por a classe do desenho dentro da classe da interface…
Alguém poderia me ajudar?
Muito obrigado
package guj;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.BasicStroke;
public class JPanelDesenho extends JPanel {
private BufferedImage bufferedImage;//buffer
private BufferedImage bufferedReta;
private BufferedImage fundo;
private int x;
private int y;
public JPanelDesenho() {
super(true);//bufferstrategy '2', acelera a atualizaçao da imagem
int width = 900;
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 caso de erro ao carregar o arquivo
Graphics2D 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
//cria uma janela para carregar a imagem
//JFileChooser fileChooser = new JFileChooser();
//fileChooser.showOpenDialog(null);
//pega o arquivo
File arquivo = new File("C:/Documents and Settings/Adriano/Desktop/Java ProjetoII/grid.png");//arquivo, vc pode colocar "new File("c:/pasta/imagem.jpg");"
try {
fundo = ImageIO.read(arquivo); //carrega a imagem no buffer
//compacta a imagem (opcional)
AffineTransform at = AffineTransform.getScaleInstance((double) 900 / fundo.getWidth(), (double) 600 / fundo.getHeight());//cria a transformacao
gi.drawRenderedImage(fundo, at);//pinta e transforma a imagem real no bufferedImage
//vc pode substituir o codigo acima de transformacao pelo codigo abaixo
//gi.drawImage(bufferedImage, 0, 0, null);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "Erro ao carregar a imagem");
}
gi.dispose();
/*javax.swing.JTextArea teste = new javax.swing.JTextArea();
javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(teste);*/
/*JOptionPane pane = new JOptionPane("Digite o tamanho em\nmetros desta parede: \n\n", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog(null, "Atenção!!!");
dialog.setSize(300,300);
dialog.setVisible(true);
// Como a textArea é editável, tudo o que eu digitar lá, vai continuar dentro dela... Viva a Orientação a Objetos!!
System.out.println( teste.getText() );*/
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.drawImage(bufferedImage, 0, 0, null);
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.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();
updateUI();//Atualiza a imagem do jpanel
}
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
pinta();
updateUI();//Atualiza a imagem do jpanel
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
pinta();
updateUI();//Atualiza a imagem do jpanel
}
public void mouseMoved(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
//CRIAR BOTÃO PARA REALIZAR A FUNÇÃO ABAIXO
pinta();
Graphics gDaImagem = bufferedImage.createGraphics();//pega o g da imagem
gDaImagem.drawImage(bufferedReta, 0, 0, null);//desenha a reta final na imagem
gDaImagem.dispose();
updateUI();
/*String tamanhoParede;
tamanhoParede = JOptionPane.showInputDialog(null,"Digite o tamanho em\nmetros desta parede: \n", "Atenção!!!", JOptionPane.INFORMATION_MESSAGE);
System.out.println(tamanhoParede);
int tamanho2 = Integer.parseInt(tamanhoParede);
pinta(e.getX()+tamanho2, e.getY());
gDaImagem = bufferedImage.createGraphics();//pega o g da imagem
gDaImagem.drawImage(bufferedReta, 0, 0, null);//desenha a reta final na imagem
gDaImagem.dispose();
updateUI();*/
}
private void pinta() {
Graphics2D gDaReta = bufferedReta.createGraphics();
gDaReta.drawImage(bufferedImage, 0, 0, null); //desenha a imagem gravada
gDaReta.setColor(Color.BLACK);//seta a cor da reta
gDaReta.setStroke(new BasicStroke(2.0f));
gDaReta.drawRect(x, y, 80, 50);
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(900, 600));
jFrame.getContentPane().add(desenho);
jFrame.setResizable(false);
jFrame.pack();
jFrame.setVisible(true);
}
}