Canvas

Não sei se postei no lugar certo, mas vamos la:

Eu queria fazer o seguinte: abrir uma janela e sair desenhando nela e talz.
Bom, dai eu comecei a estudar um pouco, e achei a classe canvas. Muito interessante e coisa e tal e tal e coisa.
ai la vou eu implementar um trocinho desse ae, faço o paint e tudo mais. ele fica ate butininho.
mas não funcional. aconteceu o seguinte, quando eu clico pra desenhar no canvas, que esta dentro de uma jframe, ele desenha abaixo dele, escondendo as linhas abaixo do canvas.

bom pessoal, eu sou iniciante nisso, provavelmente fiz uma besteira muito grand e ecoisa e tal, mas como disse sou iniciante e acredito que errando é que a gente aprende. alguem poderia me ajudar?

segue meu codigo:

package photopobre;
import java.awt.*;

    public Principal() {
        initComponents();
    }
    
    public int ix=0,iy=0,fx=0,fy=0,xatual=0,yatual=0;
    public String cor = "";
    
    
    public void paint(Graphics g)
    {       
       if(cor.compareTo("vermelho")==0)
       {
          label1.setText("");
          g.setColor(Color.RED);
          g.drawLine(ix,iy,fx,fy);    
       }
       else if (cor.compareTo("amarelo")==0)
       {
           label1.setText("");
           g.setColor(Color.YELLOW);
           g.drawLine(ix,iy,fx,fy);                                 
       }
       else
       {
           label1.setText("Escolha uma cor!");
       }       

    }
    // métodos para pegar o mouse.
      public boolean mouseDown(Event e, int x, int y) 
  { 
     ix=x; 
     iy=y;    
     repaint();     
     return true; 
  } 
      
      public boolean mouseUp(Event e, int x, int y) 
  {     
       fx = x;
       fy = y;       
       repaint();
       

       return true; 
  } 
      
      public boolean mouseDrag(Event e, int x, int y) 
  { 
     fx=x; 
     fy=y;      
     repaint();           
     return true; 
  } 
            
    private void button2MouseClicked(java.awt.event.MouseEvent evt) {                                     
        cor = "amarelo";
    }                                    

    private void button1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        
        cor = "vermelho";
    }                                    
    

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Principal p = new Principal();
                p.setBackground(Color.WHITE);
                p.setVisible(true);                                      
            }
        });
    }
    
    // Declaração de variáveis - não modifique                     
    private java.awt.Button button1;
    private java.awt.Button button2;
    private java.awt.Canvas canvas1;
    private java.awt.Label label1;
    // Fim da declaração de variáveis                   
    
}

bom é isso ae, aguardo enquanto uma alma caridosa possa me ajudar.

  1. Não use a classe Canvas. Aliás, quase nada da AWT deve ser usado. No lugar, crie um filho de JPanel e sobrescreva o método paintComponent.

  2. Alguns ótimos guias são esses aqui:
    http://java.sun.com/docs/books/tutorial/2d/TOC.html
    http://java.sun.com/j2se/1.5.0/docs/guide/2d/spec/j2d-bookTOC.html
    http://java.sun.com/products/jfc/tsc/articles/painting/index.html#swing

  3. Sempre tire uma cópia do objeto Graphics antes de usa-lo e libere-a no final.

  4. Se curtir joguinhos também pode dar uma olhada nesses locais aqui:
    Coke and Code, Space Invaders Tutorial:
    http://www.cokeandcode.com/spaceinvaderstutorial

Killer Game Programming in Java:
http://fivedots.coe.psu.ac.th/~ad/jg/

  1. Não use uma string para representar uma cor. Existe a classe Color para isso.

  2. Se vc quer ajuda, é bom falar qual é a sua dúvida…

Você quer fazer um mini-paint ou um mini-corel?

Muito obrigado, de verdade

a ideia era fazer um mini-paint msm, mas então não uso o canvas mesmo?

Não.

Se for fazer um mini paint o ideal é desenhar sobre um BufferedImage e, então, desenhar esse BufferedImage num painel.

Caso contrário, se minimizar a tela, a imagem do painel desaparecerá.

Para desenhar num BufferedImage você também usa o Graphics2D, praticamente da mesma forma que faria num painel. Os textos ensinam isso.

quando vi o titulo jurei q seria mais um post J2Me… :roll:

Muito obrigado cara, vou tentar aqui.