AlphaComposite Прозрачность с перекрашиванием накладывается на черный

Итак, у меня есть изображение поверх другой панели, и это изображение прозрачно, так что вы можете видеть панель под ним. Я пытаюсь использовать repaint () для постепенного исчезновения изображения (которое рисуется методом drawImage () в java.awt.Graphics) до тех пор, пока оно не станет полностью прозрачным, чтобы вы могли четко видеть панель под ним. На данный момент изображение просто становится черным, а не прозрачной текстурой.

Это немного моего кода прямо сейчас:

метод paintComponent:

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    float alpha = 1f-(.01f*(float)opcounter);
    Graphics2D g2d = (Graphics2D)g;
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN, alpha);
    g2d.drawImage(img, 0, 0, null);
}

метод actionPerformed, который вызывается для таймера

public void actionPerformed(ActionEvent e)
{
    opcouner++;
    panel.repaint();
}

Более длинная (без сокращений) версия моего кода: (включая paintComponent и класс Mover для таймера)

                            public void paintComponent(Graphics g)
            {   
                super.paintComponent(g);
                Dimension framesize = frame.getSize();
                this.setBounds(0,0,framesize.width, framesize.height-61);

                if (buff)
                {
                    //this.add(buffer);
                    if (opcounter <= 255)
                    {
                        buffer.setForeground(new Color(250, 250, 250, 0+opcounter));
                    }
                    else 
                    {
                        opcounter = 0;
                        buff = false;
                        hand = true;
                    }
                }
                if (hand)
                {
                    this.add(handson);
                    if (opcounter <= 255)
                    {
                        handson.setForeground(new Color(250, 250, 250, 0+opcounter));
                    }
                    else 
                    {
                        opcounter = 0;
                        hand = false;
                        log = true;
                    }
                }
                if (log)
                {
                    this.add(logic);
                    if (opcounter <= 255)
                    {
                        logic.setForeground(new Color(250, 250, 250, 0+opcounter));
                    }
                    else 
                    {
                        opcounter = 0;
                        log = false;
                        pan = true;
                    }
                }
                if (pan)
                {
                    this.add(panic);
                    if (opcounter <= 255)
                    {
                        panic.setForeground(new Color(250, 250, 250, 0+opcounter));
                    }
                    else 
                    {
                        opcounter = 0;
                        pan = false;
                        first = false;
                        second = true;
                        try
                        {
                            //Thread.sleep(2000);
                        }
                        catch(Exception e)
                        {
                            System.out.println("thread not slept");
                        }
                        System.out.println("opcounter = " + opcounter);
                        black.setVisible(false);
                        handson.setVisible(false);
                        logic.setVisible(false);
                        panic.setVisible(false);
                        tutpic = true;
                    }
                }
                if (tutpic)
                {
                    if (opcounter <= 200)
                    {
                        Graphics2D g2d = (Graphics2D)g.create();
                        float alpha = 1f-(.01f*(float)opcounter);
                                          g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN, alpha));
                        g2d.drawImage(tut, 0, 0, null);
                        g2d.dispose();
                    }
                    else
                    {
                        opcounter = 0;
                        tutpic = false;
                    }
                }
            }

            class Mover implements ActionListener
            {
                public void actionPerformed(ActionEvent e)
                {
                    if (!tutpic)
                        opcounter+=4;
                    else
                    {
                        opcounter++;
                    }
                    tutorial.repaint();
                }   
            }

Любая помощь будет оценена. Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос