Canvas ou JComponent?

4 respostas
Sora
Olá gente !!! Estava pesquisando sobre um problema que estava tendo com o Canvas usado junto com um JFrame e vi em alguns sites falando pra usar JComponent no lugar de Canvas (não sei se entendi muito bem, mas pelo que entendi foi isso). Então fiz o seguinte: Minha classe que era:
public class Game extends Canvas
eu mudei para:
public class Game extends JComponent
O problema é que agora não consigo mais desenhar nada na tela. Antes eu fazia o double buffering usando:
createBufferStrategy(2);
        strategy = getBufferStrategy();
E depois que desenhasse os gráficos era só usar:
strategy.show();
Mas o JComponent não tem nada disso, então olhando a documentação dele vi que era pra fazer:
this.setDoubleBuffered(true);

Agora o problema é que eu não consigo desenhar mais nada na tela. O programa carrega o JPanel, mas não exibe nada dentro dele.

Veja um exemplo de uma função que deveria desenhar:

public void paintStageConfig(){
        Graphics2D g = (Graphics2D)strategy.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0,0,getWidth(),getHeight());
        g.setFont(new Font("Arial",Font.BOLD,20));

        g.setPaint(Color.GREEN);
        g.drawString("OBJETIVO: ",Stage.WIDTH/2-90, 120);

        //strategy.show();

    }

Logo no início essa função é chamada, mas não aparece nada. O que estou fazendo de errado? Se necessário, posto mais código, postei só o que achei necessário, pois o programa tem bastante coisa.

Vlw!

4 Respostas

Marky.Vasconcelos

Para jogos voce deve usar Canvas mesmo. Pois voce tem a vantagem do BufferStrategy.

Sora

Entendi. Então vou voltar a deixar como estava antes mesmo, pois estava lendo sobre isso e vi em muitos lugares falando pra não usar o Canvas.
Você sabe se é normal, no Linux, o programa demorar um pouco pra fechar ao clicar no botão de fechar da janela?
Isso acontece mais na tela que está exibindo isto:

public void paintStageConfig(){  
    Graphics2D g = (Graphics2D)strategy.getDrawGraphics();  
     g.setColor(Color.black);  
    g.fillRect(0,0,getWidth(),getHeight());  
     g.setFont(new Font("Arial",Font.BOLD,20));  
  
    g.setPaint(Color.GREEN);  
    g.drawString("OBJETIVO: ",Stage.WIDTH/2-90, 120);  
  
     strategy.show();  
   
 }
Marky.Vasconcelos

Talvez seja problema do processador e não da aplicação.

Sora

Entendo. Vou testar ele aqui em outro PC então e ver o que acontece, o que eu estou achando estranho é que só acontece isso nesta tela. Vou fazer uns testes e depois posto se consegui descobrir algo.

Criado 5 de agosto de 2009
Ultima resposta 8 de ago. de 2009
Respostas 4
Participantes 2