Ola pessoal! eu vim com uma duvida basica aqui !
Vcs podem me mostrar como eu pinto o fundo do meu JPanel por codigo? ;O)
eu fiz um programinha bobo que desenha umas formas e queria pintar o fundo:
public class BoardDonut extends JPanel{
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
Graphics2D g1 = (Graphics2D) g;
Graphics2D g0 = (Graphics2D) g;
RenderingHints rh =
new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
rh.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHints(rh);
g1.setRenderingHints(rh);
g0.setRenderingHints(rh);
Dimension size = getSize();
double w = size.getWidth();
double h = size.getHeight();
double w2 = size.getWidth();
double h2 = size.getHeight();
double w3 = size.getWidth();
double h3 = size.getHeight();
Rectangle2D a = new Rectangle2D.Double(0, 0, 80, 130 );
Line2D e = new Line2D.Double(0, 0, 80, 130);
Ellipse2D m = new Ellipse2D.Double(10, 10, 800, 1300);
g1.setStroke(new BasicStroke(3));
g1.setColor(Color.black);
for (double deg = 0; deg < 360; deg += 5) {
AffineTransform at =
AffineTransform.getTranslateInstance(w / 2, h / 2);
AffineTransform.getTranslateInstance(w2 / 2, h2 / 2);
AffineTransform.getTranslateInstance(w3 / 2, h3 / 2);
at.rotate(Math.toRadians(deg));
g2.draw(at.createTransformedShape(a));
g2.draw(at.createTransformedShape(m));
g0.draw(at.createTransformedShape(e));
}
}
}
me diz, como eu faço pra pintar o background desse JPanel por codigo mesmo? tentei umas coisa aqui mais n deu certo
vlw pessoal
Entao, aki que esta o problema!
Se eu tivesse criado a interface grafica do programa…eu mudava o background
mais eu criei o JPanel por codigo
nao tem a opçao de ver o JPanel mesmo, sabe? eu queria saber como pinto o bg por codigo.
Para sobrescrever a pintura de um componente, você deve sobrescrever o método paintComponent, não o paint.
Você também não pode mudar o estado do Graphics, ou seja, se mexer numa cor, tem que restaurar a cor antiga antes de sair do método. A forma mais fácil de garantir isso, é fazendo uma cópia do Graphics.
Você está aplicando os RenderingHints de maneira errada;
Você está chamando diversos métodos do AffineTransform sem atribuir as transformações resultantes à nada.
Não tem porque também criar várias referências para o objeto Graphics.
Veja:
[code]public class BoardDonut extends JPanel{
@Override
public void paintComponent(Graphics graphics) {
Graphics2D g = (Graphics2D) graphics.create(); //Isso faz a cópia
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
//Aplica a cor do fundo
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeigth());
//Desenho
Rectangle2D a = new Rectangle2D.Double(0, 0, 80, 130 );
Line2D e = new Line2D.Double(0, 0, 80, 130);
Ellipse2D m = new Ellipse2D.Double(10, 10, 800, 1300);
g.setStroke(new BasicStroke(3));
g.setColor(Color.black);
for (double deg = 0; deg < 360; deg += 5) {
AffineTransform at = AffineTransform.getTranslateInstance(w / 2, h / 2);
at.rotate(Math.toRadians(deg));
g.draw(at.createTransformedShape(a));
g.draw(at.createTransformedShape(m));
g.draw(at.createTransformedShape(e));
}
g.dispose(); //Libera a cópia do Graphics
}
}
[/code]
Dê uma lida nos tutoriais de Java do Ponto V!. Eles explicam diversos detalhes sobre como o Java2D funciona. Também seria bom você ler o artigo sobre matrizes e transformações para entender o que o AffineTransform faz. Não programe por tentativa e erro. Se alguma coisa não está funcionando, estude o porque.