Janela Transparente

Não entendo!!! Meu programinha tava funcionando perfeitamente… baixei a versão + nova dojava e começou o problema!

Tenho uma janela q utiliza métodos gráficos (paint e tals) … ela agora está gravando tudo de imagem! Por exemplo, quando abre o fundo fica trasparente e exibie oq estava atrás, e se vc coloca alguma imagem em cima da janela ela fica marcada r tdo!

Preciso saber urgente q q eh isso! Eh meu trab da facul, tenho de entregar e parou de funcionar!!!

deve ser algum problema com o metodo update() ja que vc personalizou seus paints, ele nao esta limpando a tela antes de repintar.

opa, deve ser isto mesmo… pq na minha versão antigo eu n utilizava métopdo update… mas estava funcionando (eu tava com uma versãobem antiga do java)

Mas como e qdo eu chamo o update?

Valeu :!:

Sua aplicação é swing ou AWT?

Se é swing, você sobrescreveu o método paintComponent de que componentes?

Finalmente, o objeto Graphics deve sair da janela inalterado, senão os próximos componentes pintados podem se perder. Você garante que isso acontece? Geralmente é só uma questão de fazer:

public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g.create(); //Fazemos uma cópia para trabalhar e não alterar g //Trabalhamos com g2d g2d.dispose(); //Liberamos a cópia. }

Eh swing…

:shock: mew n entendi nada!!!
Eu n uso paintComponent(Graphics g), eu uso o paint(Graphics g) que desenha tdo q eu qro na tela… mas os desenhos q eu faço funcionam, ficam na tela legal e tals, o problema eh o fundo da tela, entende? Eu setei uma cor de fundo mas ela n aparece, em vez disso fica transparente e marcando tdo q vc passa por ela…

Então… você está sobrescrevendo o método paint do JFrame, certo?
Pq, se for de um JPanel, você deveria estar sobrescrevendo paintComponent.

Quanto ao fundo transparente. Se você sobrescreveu o método de pintura, você deverá pintar o fundo na mão, ou fazer uma chamada a super.paint() logo no inicio do seu método.

Pode ser mais ou menos assim (assumindo que é o paint do frame):

public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g.create(); //Abaixo, criamos um retângulo em toda a tela, com a cor do fundo g2d.clearRect(0, 0, this.width(), this.height()); //Aqui você coloca o resto do seu código de pintura g2d.dispose(); }

Ou:

[code]public void paint(Graphics g) {

Graphics2D g2d = (Graphics2D)g.create();
//Chamamos o paint do frame, para que ele se encarregue do fundo
//Isso também pintará componentes sobre o frame, caso existam
super.paint(g);
//Aqui você coloca o resto do seu código de pintura
g2d.dispose();
}[/code]

Se você vai pintar várias vezes, fazendo uma animação, então o ideal é nem sequer usar o método paint. Se você fizer isso, se deparará com uma tela piscando, um efeito conhecido como flicking. Se for esse o seu caso, dê uma lida neste tópico.

Cara, se não for muito grande, põe a tua aplicação num zip e anexa aqui pra gente dar uma olhada…