Canvas não mostra o que é desenhado

4 respostas
fabricioff

Caros, sou novo no mundo java, estou tentando brincar com canvas para poder desenhar um " mapa geografico", entretanto nem meus exemplos mais simples funcionam, alguem poderia olhar o codigo abaixo e me indicar o que eu fiz de errado?

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.image.*;

public class Teste
{

static JFrame frame = new JFrame("Bundinha");
static public Canvas mapa = new Canvas();
static public Graphics g;


public static void main(String args[])
{
	
	
	frame.setSize(600,400);
	frame.setVisible(true);
	

		
	Container caixa = frame.getContentPane();
	Canvas mapa = new Canvas();
	
	
	g=mapa.getGraphics();
	
	mapa.paint(g);
	g.drawLine(0,0,255,255);
	caixa.add(mapa);
	
	frame.add(caixa);
	
}

}

VLW

4 Respostas

ViniGodoy

Você pode desenhar diretamente sobre o frame ou o panel.
Não misture objetos do Swing (como JFrame) com AWT (como Canvas).

Para desenhar, crie uma classe filha de JFrame e sobrescreva o método paintComponent().

Quando fizer isso, um objeto Graphics2D já será automaticamente passado como parâmetro, onde você poderá desenhar.

Tome cuidado pois você não deve alterar o estado do objeto Graphics. Para isso, existe o método create(), que faz uma cópia desse objeto. Você então altera o que quiser na cópia (fonte, por exemplo), pinta e borda e depois simplesmente dá um dispose() nela (fique tranquilo, isso não fará que o seu desenho vá para as cucuias).

Por exemplo;

public class FrameBundinha extends JFrame { public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g.create(); //Desenha o mapa g2d.drawLine(0,0,100,100); g2d.dispose(); } }
Depois no seu main:

FrameBundinha f = new FrameBundinha();
f.setVisible(true);
fabricioff

Muito obrigado pela ajuda, mas quando eu testei seu exemplo a linha continua não aparecendo.

VLW

ViniGodoy

Não era um exemplo funcional.

Se quer algo funcional, veja aqui:
http://www.guj.com.br/posts/list/48344.java

Todo jogo é desenhado usando pintura sobre o frame.

fabricioff

Brigadão! Era isso mesmo!.

Criado 28 de fevereiro de 2007
Ultima resposta 1 de mar. de 2007
Respostas 4
Participantes 2