Ajuda basica com JPanel :D

Ola pessoal! eu vim com uma duvida basica aqui !
Vcs podem me mostrar como eu pinto o fundo do meu JPanel por codigo? ;O)
eu fiz um programinha bobo que desenha umas formas e queria pintar o fundo:

public class BoardDonut extends JPanel{

public void paint(Graphics g)
{
  super.paint(g);

  Graphics2D g2 = (Graphics2D) g;

  Graphics2D g1 = (Graphics2D) g;

  Graphics2D g0 = (Graphics2D) g;

  RenderingHints rh =
        new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                           RenderingHints.VALUE_ANTIALIAS_ON);

  rh.put(RenderingHints.KEY_RENDERING,
         RenderingHints.VALUE_RENDER_QUALITY);

  g2.setRenderingHints(rh);
  g1.setRenderingHints(rh);
  g0.setRenderingHints(rh);

  Dimension size = getSize();
  double w = size.getWidth();
  double h = size.getHeight();
  double w2 = size.getWidth();
  double h2 = size.getHeight();
  double w3 = size.getWidth();
  double h3 = size.getHeight();
  

  Rectangle2D a = new Rectangle2D.Double(0, 0, 80, 130 );
  
  Line2D e = new Line2D.Double(0, 0, 80, 130);
  
  Ellipse2D m = new Ellipse2D.Double(10, 10, 800, 1300);
  g1.setStroke(new BasicStroke(3));
  g1.setColor(Color.black);

  

  for (double deg = 0; deg < 360; deg += 5) {
      AffineTransform at =
          AffineTransform.getTranslateInstance(w / 2, h / 2);
          AffineTransform.getTranslateInstance(w2 / 2, h2 / 2);
          AffineTransform.getTranslateInstance(w3 / 2, h3 / 2);
      at.rotate(Math.toRadians(deg));
      g2.draw(at.createTransformedShape(a));
      g2.draw(at.createTransformedShape(m));
      g0.draw(at.createTransformedShape(e));
    }
}

}

me diz, como eu faço pra pintar o background desse JPanel por codigo mesmo? tentei umas coisa aqui mais n deu certo :wink:
vlw pessoal

Oi,

Quando for postar código,poste entre as tags Code.

http://silveiraneto.net/2008/01/15/desenhando-com-java-e-netbeans/

eu sei foi mal
eu axei q tinha q dexa formataçao bb desabilitada
é o contrario neh? ;D

[quote=Yakkut]eu sei foi mal
eu axei q tinha q dexa formataçao bb desabilitada
é o contrario neh? ;D[/quote]

Tudo bem,aqui explica direitinho…http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

Entao, aki que esta o problema!
Se eu tivesse criado a interface grafica do programa…eu mudava o background
mais eu criei o JPanel por codigo
nao tem a opçao de ver o JPanel mesmo, sabe? eu queria saber como pinto o bg por codigo.


botao1.setBackground(Color.yellow);
botao2.setBackground(Color.red);
botao3.setBackground(Color.blue);
botao4.setBackground(Color.white);

Baixe essa apostila…http://acervobrasil.blogspot.com/2008/10/apostila-java-2-com-banco-de-dados.html

Dê um fillRect do tamanho do painel inteiro:

g.fillRect(0, 0, getWidth(), getHeight());

Seu código tem outros problemas:

  1. Para sobrescrever a pintura de um componente, você deve sobrescrever o método paintComponent, não o paint.
  2. Você também não pode mudar o estado do Graphics, ou seja, se mexer numa cor, tem que restaurar a cor antiga antes de sair do método. A forma mais fácil de garantir isso, é fazendo uma cópia do Graphics.
  3. Você está aplicando os RenderingHints de maneira errada;
  4. Você está chamando diversos métodos do AffineTransform sem atribuir as transformações resultantes à nada.

Não tem porque também criar várias referências para o objeto Graphics.

Veja:

[code]public class BoardDonut extends JPanel{

@Override
public void paintComponent(Graphics graphics) {
Graphics2D g = (Graphics2D) graphics.create(); //Isso faz a cópia
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

  //Aplica a cor do fundo
  g.setColor(Color.WHITE); 
  g.fillRect(0, 0, getWidth(), getHeigth());

  //Desenho
  Rectangle2D a = new Rectangle2D.Double(0, 0, 80, 130 );
  Line2D e = new Line2D.Double(0, 0, 80, 130);
  Ellipse2D m = new Ellipse2D.Double(10, 10, 800, 1300);

  g.setStroke(new BasicStroke(3));
  g.setColor(Color.black);

  for (double deg = 0; deg < 360; deg += 5) {
        AffineTransform at = AffineTransform.getTranslateInstance(w / 2, h / 2);
        at.rotate(Math.toRadians(deg));
        g.draw(at.createTransformedShape(a));
        g.draw(at.createTransformedShape(m));
        g.draw(at.createTransformedShape(e));
  }
  g.dispose(); //Libera a cópia do Graphics

}
}
[/code]

Dê uma lida nos tutoriais de Java do Ponto V!. Eles explicam diversos detalhes sobre como o Java2D funciona. Também seria bom você ler o artigo sobre matrizes e transformações para entender o que o AffineTransform faz.
Não programe por tentativa e erro. Se alguma coisa não está funcionando, estude o porque.