método paintComponent[Resolvido]

2 respostas
M

Tenho um componente que criei, onde ele possui um Rectangle2D, um RoundRectangle2D ou um Line2D.

Na outra classe eu posso informar a mudança da cor desse componente. Até ai tudo bem. O problema é o seguinte: na classe eu posso mover esse componente. Quando eu aplico uma cor nele, funciona, porém se eu mover o componente ele perde a cor. e volta a ser como antes. Alguma idéia do que possa ser. Segue o código:

paint do componente:

protected void paintComponent(Graphics g) { g2d = (Graphics2D) g.create(); if(retangulo != null) { retangulo.setRect(0,0,this.getWidth()-1,this.getHeight()-1); g2d.draw(retangulo); } else if (linha != null) { linha.setLine(this.getX(), this.getY(), this.getWidth()-1, this.getHeight()-1); g2d.draw(linha); } else { retanguloRound.setRoundRect(0,0,this.getWidth()-1,this.getHeight()-1,25,20); g2d.draw(retanguloRound); } }

método para alterar a cor do retangulo.

public void setCorRetangulo(Color cor) { g2d.setColor(cor); g2d.fill(retangulo); repaint(); }

2 Respostas

ivo_costa

Acho que tu tem que guardar a cor nova em uma variável, pq toda as vezes que o componente for movido ele vai char o método paintComponente, no método paintComponent não está sendo setado nenhuma cor, então ele vai usar a cor original.

protected void paintComponent(Graphics g) {
		g2d = (Graphics2D) g.create();
		g2d.setColor(cor);
		if(retangulo != null) {
			retangulo.setRect(0,0,this.getWidth()-1,this.getHeight()-1);
			g2d.draw(retangulo);
		} else if (linha != null) {
			linha.setLine(this.getX(), this.getY(), this.getWidth()-1, this.getHeight()-1);
			g2d.draw(linha);
		} else {
			retanguloRound.setRoundRect(0,0,this.getWidth()-1,this.getHeight()-1,25,20);
			g2d.draw(retanguloRound);
		}
	}
M

Perfeito ivo costa, era isso mesmo. Tão simples, mas não me veio a cabeça hehe. Muito obrigado pela ajuda.

Criado 3 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 2
Participantes 2