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!!!
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.
}
: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…