[ajuda] Formas eficientes para atualizar graficos

2 respostas
G

Oi pessoal, tudo certo?

bom preciso de ajuda com uma jFrame que comecei a fazer ontem…
Esse frame não tem o contorno normal da janela,

this.setUndecorated(true);

para que eu podesse colocar o meu próprio estilo de janela,
pois eu estava tentando simular aquele efeito do vista,
a barra de titulo da janela é transparente e embaça o que tem atras,
eu fiz o seguinte, eu criei uma classe que tira a foto da tela inteira
quando o usuario tira o foco da janela, assim ela some (para que não saia na foto), tira a foto, embaça e salva em uma variavel,
assim quando o usuario ela faz a mesma coisa, caso o usuario tenha mudado a tela antes de abrir denovo a frame, nem dá
para perceber esse meio tempo, ai ela pega essa foto guardada na variavel, corta a area onde a barra de titulo está(para quem ve acha que a barra
de titulos é transparente), mas aí começa os problemas:

  • eu tenho que desenhar a imagem recortada na area desejada,
  • desenhar um retangulo para dar o efeito de barra de titulo
  • desenhar um reflexo falso (usei o g.fillOval()…)
  • desenhar titulo da janela

Para desenhar isso tudo eu usei o getGraphics do jFrame, e os metodos drawRectangle, fillRectangle, fillOval, drawString, etc…
Tudo certo, embaçadinho e simulando o efeito do do vista, não tao legal quanto, mas o suficiente…

só que na hora de arrastar a janela me vem o problema, acada paint() da janela, ele tem que atualizar a area foto embaçada, cortar outra parte, e depois desenhar ela na janela, ao desenhar ela fica em cima dos retangulos que foram desenhados antes, aí eu tenho q desenhar tudo denovo, mas para desenhar tudo denovo demora muito, dá para ver a janela desenhando tudo, assim eu tentei reduzir o numero de coisas que ela desenha cada
vez que atualiza, mas continua dando problemas de demorar para atualizar tudo de novo…

Eu pensei se tem alguma forma de usar Labels que fique uma em cima da outra, e quando a de baixo atualiza as outras continuem “em cima”, sem que a de baixo sobreponha as demais… (recém estou aprendendo a mexer com as API awt do java, por isso não sei se isso é capaz de se fazer)

Ou talvez uma forma de mesclar as imagens de forma rápida (só sei pixel por pixel), caso tenha um método que faça isso de maneira rápida, assim eu só tenho que desenhar essa imagem e o titulo…

Agradeço qualquer resposta :smiley:

Caso eu não tenha explicado direito eu anexei o programa em .jar com esse post.

Flw, T+!

2 Respostas

G

:frowning: Nenhuma resposta ainda?

bom, fiz umas melhorias, reduzi um pouco as vezes que pisca a barra de titulos…

Edited: Concertei uns probleminhas da versão nova :wink:

G

Bom pessoal, mesmo ninguém respondendo eu achei uma forma, double buffering…

vou motrar um exemplo, talvez seja util para alguem:

Image offScreen;
Graphics gOffScreen;

public void update(Graphics g)
{
    if(offScreen == null)
    {
         offScreen = createImage(this.getWidth(),this.getHeight());
         gOffScreen = offScreen.getGraphics();
    }
//desenhando tela e etc...
super.paintComponents(gOffScreen);
gOffScreen.drawLine(0,0,25,25);

//desenhando imagem pronta
g.drawImage(offScreen,0,0,this);
}
}

flw

Criado 5 de fevereiro de 2009
Ultima resposta 1 de mar. de 2009
Respostas 2
Participantes 1