Problemas para desenhar na tela

5 respostas
dm_thiago

Galera, to tentando desenhar um componente na tela, mas está dando NullPointException (na primeira chamada do g, linha 8) e eu não sei porque! O código:

public void imprimir (TreeNode pNo, int pLinha)
	{
		Graphics g = super.getGraphics();
	
		int tLinha = pLinha * aDistanciaLinha;
		int tColuna = aLinhaN[pLinha] * aDistanciaColuna;
		
		g.drawRect(tColuna, tLinha, 100, 30);
		g.drawString(pNo.toString(), (tColuna + 10), tLinha);
		
		aLinhaN[pLinha]++;
	}

Alguem tem alguma idéia de como me ajudar?

5 Respostas

lina

Oi,
você não esta instanciando a variavel…
eu gostei da ideia e fiz uma classe pequena pra teste…
de uma olhada, pode ajudar…

public 
class			Painter
	extends		JFrame
{	
	//
	// Declara as variaveis necessarias.
	//		
	public			VolatileImage
	teste;
	
	public			Graphics2D
	graphic;
	
	public			Button
	teste_button,
	button;

	/**	 
	 * Construtor da classe.
	 */
	public			Painter()
	{
		//
		// Cria o titulo da janela.
		//
		setTitle("Painter");
		
		// Define a cor do fundo.
		setBackground(new Color(153, 204, 255));
		
		//
		// Define o tamanho da janela.
		//
		setSize(500,300);
		
		//
		// Adiciona o container junto com o Label.
		//
		getContentPane().add	(
						new Label("Segure o mouse e desenhe"),						
						BorderLayout.SOUTH
					);
		//
		// Cria o evento do mouse.
		//
		addMouseMotionListener	(
						new MouseMotionAdapter()
						{
							public
							void			mouseDragged(MouseEvent e)
							{	
								graphic.drawOval(e.getX(), e.getY(),4,4);								
								repaint();
							}
						}
					);
		addMouseListener	(
					new MouseAdapter() 
					{
						public void mouseClicked(MouseEvent e) 
						{
							// Se clicado uma vez... cor padrão.						
							if	(
									(e.getClickCount() == 1) 
									&& 
									(e.getButton() == MouseEvent.BUTTON3)
								) 
							{
								graphic.setColor(Color.BLACK);
							}
							// Se clicado 2 vezes.. cor vermelha.							
							else if	(
									(e.getClickCount() == 2) 
									&& 
									(e.getButton() == MouseEvent.BUTTON3)
								)
							{
								graphic.setColor(Color.RED);								
							}
						}
					}
				);
		
		//
		// Abre a janela.
		//
		show();
		
		teste = createVolatileImage(500,500);
		graphic =	teste.createGraphics();
		
	}
	
	/**
	 * Método paint.
	 */
	public
	void			paint(Graphics g)
	{	
		g.drawImage(teste,0,0,this);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		new Painter().setVisible(true);
	}
}

Tchauzin!

dm_thiago

Eu pensava que no “Graphics g = super.getGraphics();” intanciaria ela.

Olhado esse seu exemplo me surgiu uma duvida:

Você desenhou em cima de um VolatileImage (nunca tinha ouvido falar disso antes), na minha classe eu tentava desenhar sobre um JPanel. Seria mais correto então usar o VolatileImage?

Outra coisa ainda, do jeito que você instanciou o graphic, não dá para fazer com o JPanel. Você saberia outro jeito?

Obrigado!

ps: toda duvida que eu posto aqui de interface, é sempre você que me ajuda… muito obrigado!

lina

Oi,
Eu usei ali o VolatileImage por ter uma aceleração a mais e tornar o desempenho mais rapido…
porem é uma imagem que pode perder seus conteúdos qualquer hora a devido a circunstâncias além do controle da aplicação (por exemplo, situações causadas pelo sistema operacional ou através de outras aplicações)…

estou em uma lan aqui hehehehehe, mas assim que possivel irei ver como fazer com um JPanel… eu lembro que eu fiz com JPanel e troquei pra Volatili por ele ser mais rapido rsrs…

ps: Vai ver porque suas duvidas são interessantes

Tchauzin!

dm_thiago

Esse VolatileImage me pareceu interessante… vou dar uma estudada e ver o que eu aprendo sobre. Vou ficar esperando uma resposta sua para o JPanel.

Obrigado de novo!
[]´s

dyorgio

cara…esta dando nullPointer porque vocês esta chamando esse seu método
antes da janela estar visivel…
quando isso ocorre a chamada a getGraphics() retorna null…
leia o doc do Java ¬¬
faça apenas um if verificando se é diferente de null
e viva feliz

Abs

Criado 18 de junho de 2007
Ultima resposta 12 de set. de 2007
Respostas 5
Participantes 3