BufferedImage

5 respostas
P

Bom galera, tava querendo fazer um programinha tipo o paint e talz, fiz um mas salvando os desenhos criados pelo usuario em uma lista. Queria fazer a mesma coisa, so que em vez de guardar dentro de uma lista, desenhar em uma BufferedImage. ai comecei a pesquisar um pouco sobre isso, e tentei fazer algo aqui. Mas não esta funcionando. segue o codigo:

class AreaPintura extends javax.swing.JPanel {
    private BufferedImage img;
  
       
    public AreaPintura()
    {
        img = new BufferedImage(200,200, BufferedImage.TYPE_INT_ARGB); 
    }
    
    public void Pintar()  
    {  
       Graphics2D graficos = (Graphics2D) img.getGraphics().create();  
       graficos.setColor(Color.GREEN);  
       graficos.fillOval(50, 50, 100, 100);  
       graficos.dispose();  
       repaint();
    }  
    
           
       private void paintComponent(Graphics2D g)  
    {  
        super.paintComponent(g);  
        g.drawImage(img, 30, 30, null);  
    }  
}

Ao que entendi, era pra ter aparecido um circulo na tela, mas nao ta aparecendo. alguem poderia me ajudar?
e também alguém sabieria um bom lugar onde posso aprender a utilziar o bufferedimage direitinho?
vlw galera!

5 Respostas

ViniGodoy

Ao invés de img.getGraphics().create();

use

E já tem o brinde dele já te retornar um Graphics2D.
Onde vc chama o método pintar?

Um bom lugar para vc aprender é esse aqui:
http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-bookTOC.html

P

no caso, eu estava chamando o Pintar, a partir daqui:

public PhotoPobre() {

        initComponents();    
                if(area == null)
        {
            area = new AreaPintura();
            area.setBackground(Color.WHITE);
            
              area.addMouseMotionListener(new MouseMotionAdapter() {  
   
                 /** 
                  * @see java.awt.event.MouseMotionAdapter#mouseDragged(java.awt.event.MouseEvent) 
                  */  
                 public void mouseDragged(MouseEvent pE) {  
                     int x1 = pE.getX(); int y1 = pE.getY();  
                     area.Pintar();                       
                     repaint();  
                 }  
                   
             });  
            
        }
    }

mas ainda assim nao deu certo, com o createGraphics(). nao ta mostrando nda no jPanel.

ViniGodoy

Não faltou adicionar o area no JFrame?

luistiagos

creio que este metodo pintar deve estar dentro do paintComponent se não me engano… e o repaint deve ser chamado la dentro… use cordenadas globais(armazenadas em variaveis de instancia) e modifique com os listeners os valores destas variaveis… e todos os pintar chame dentro do paintComponent…

P

bom, ele ta chamando a area aqui, olha:

static AreaPintura area = null;
    public PhotoPobre() {

        initComponents();    
                if(area == null)
        {
            area = new AreaPintura();
            area.setBackground(Color.WHITE);
            
              area.addMouseMotionListener(new MouseMotionAdapter() {  
   
                 /** 
                  * @see java.awt.event.MouseMotionAdapter#mouseDragged(java.awt.event.MouseEvent) 
                  */  
                 public void mouseDragged(MouseEvent pE) {  
                     int x1 = pE.getX(); int y1 = pE.getY();  
                     area.Pintar();                       
                     repaint();  
                 }  
                   
             });  
            
        }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                PhotoPobre p = new PhotoPobre();
                p.setVisible(true);
                p.setContentPane(area);                                               
            }
        });
    }

Que fica em outra classe, chamada PhotoPobre.

Mais dentrto do paintcomponent nao ficaria somente o comando de desenhar na tela a bufferedimage?
ou estou entendendo errado?

Criado 11 de março de 2008
Ultima resposta 13 de mar. de 2008
Respostas 5
Participantes 3