AlphaComposite Transparency mit neuen Überlappungen in Schwarz

Ich habe also ein Bild über einem anderen Bedienfeld und dieses Bild ist transparent, sodass Sie das Bedienfeld darunter sehen können. Was ich versuche, ist, repaint () zu verwenden, um das Bild (das mit der drawImage () -Methode in java.awt.Graphics gezeichnet wird) auszublenden, bis es vollständig transparent ist, sodass Sie das Bedienfeld darunter klar sehen können. Ab sofort wird das Bild nur in Schwarz anstatt in eine transparente Textur eingeblendet.

Dies ist ein kleiner Teil meines Codes:

paintComponent-Methode:

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-Methode, die für den Timer aufgerufen wird

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

Längere (nicht komprimierte) Version meines Codes: (einschließlich paintComponent und Mover-Klasse für den Timer)

                            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();
                }   
            }

Jede Hilfe wäre dankbar. Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage