Ajuda basica com JPanel :D

6 respostas
Y

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

6 Respostas

Anime

Oi,

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

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

Y

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

Anime

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

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

Y

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.

Anime
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

ViniGodoy
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:

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
   }
}

Dê uma lida nos tutoriais de http://www.pontov.com.br/site/index.php/java"">Java do Ponto V!. Eles explicam diversos detalhes sobre como o Java2D funciona. Também seria bom você ler o artigo sobre http://www.pontov.com.br/site/index.php/arquitetura/54-matematica-e-fisica/238-matrizes-e-transformacoes-parte-1"">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.

Criado 27 de fevereiro de 2011
Ultima resposta 28 de fev. de 2011
Respostas 6
Participantes 3