Problema para decrescer o alpha de um desenho dentro de um laço

2 respostas
oitathi

Oi, estou com uma dificuldade q aparentemente eh bem simples… eu tenho uma lista de objetos. Estes objetos tem como atributos as localizações de onde devem ficar. Eu preciso q para cada objetos dessa lista essa desenhado um objeto que eu nomeei como target. Porém, deve ser feito da seguinte maneira: o ultimo elemento da lista deve ser desenhado com o aplha 100%, o penultimo com o aplha 90%, o antipenultimo com o alpha 80% e assim sucessivamente… criei esses dois metodos ( um para criar o laça e outro para desenhar), mas eu não sei por qual motivo, os targets são desenhados todos com o alpha 100%. Será q alguém pode me ajudar?

public void changeColor{
 int i= listTarget.size()-1;
 Iterator iterator =listTarget.iterator();
        while (iterator.hasNext()) {
           Target aux = (Target) iterator.next();
           JLabel newTarget = new JLabel();
           metodos.drawTarget(corDesenho,i);
           newTarget = metodos.getTarget();
           newTarget.setLocation(aux.getPosTargetX() , aux.getPosTargetY());
           newTarget.setVisible(true);
           layeredPane.add(newTarget, new Integer(atualizaContLabels()));
           i--;
}//end while


public class Metodos{
     
  public void drawTarget(Color color, int i){
        double alpha= (100-(100*i*0.2))*0.01;
        float f = (float)alpha;
        Graphics2D gr = bf3.createGraphics();
        gr.setColor(color);
        gr.setComposite(AlphaComposite.SrcOver.derive(f));
        gr.setStroke(new BasicStroke(2.0f));
        gr.drawOval(8,8,24,24);//oval
        gr.drawOval(12,12,16,16);//oval
        gr.setStroke(new BasicStroke(2.0f));
        gr.drawLine(2,20, 17,20);//linha horizontal 1
        gr.drawLine(23,20,38,20);// linha horizntal 2
        gr.drawLine(20,3,20,18);//linha vertical 1
        gr.drawLine(20,23,20,38);//linha vertival 2
        gr.dispose();
        imagem3=new JLabel(new ImageIcon(bf3));
        imagem3.setLocation(0,0);
        imagem3.setSize(40,40);
       
    }

public JLabel getTarget(){
        return imagem3;
    }
}

2 Respostas

Marky.Vasconcelos

Me pareçe que voce vai sempre ter apenas o ultimo desenho no JLabel.

Por que voce não desenha diretamente com Java2D?

oitathi

mas quando eu faço

while (iterator.hasNext()) { //....

eu não tô desenhando para cada jlabel um target com um alpha diferente? e inserindo de um a um em uma layer diferente?

Criado 9 de dezembro de 2010
Ultima resposta 9 de dez. de 2010
Respostas 2
Participantes 2