Avatar billede lmdthel Nybegynder
27. juli 2005 - 15:06 Der er 7 kommentarer

Transperent splashscreen ?

Hej

jeg har fundet en stump kode som kan starte en transperent spashscreen.. og det virker også helt fint..

MEN når jeg sætter den ind i min app , så ender det med at splash samtidig med min første frame bliver vist, og når splashscreen lukkes igen, så river den hele app den..

Er der en der måske har en gos ide til hvordan jeg skal implementere den ? eller måske har en der er endnu bedre ?
Avatar billede lmdthel Nybegynder
27. juli 2005 - 15:06 #1
Her kommer lige koden til splashscreenen:

import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Window;


public class TransparentSplashTest
{
    private TransparentSplashScreen m_transparentSplashScreen = null;
    private final String            m_strImagePath = "C:\\splash_final.png";
    private final Dimension        m_dimImageSize = new Dimension(557, 261);

    public static void main(String[] strArgs)
    {
        TransparentSplashTest tsplash = new TransparentSplashTest();
    }

    public TransparentSplashTest()
    {
        m_transparentSplashScreen = new TransparentSplashScreen(m_strImagePath, m_dimImageSize);
        m_transparentSplashScreen.start();

        try
        {
            Thread.sleep(5000);  // 5 Sekunden anzeigen lassen
        }
        catch(InterruptedException e)
        {
        }

        m_transparentSplashScreen.destroy();

        System.exit(0);
    }
   
   
    public class TransparentSplashScreen
    extends Window
    {
        private Image        m_imageSplash = null,
                            m_imageCapture = null;
        private Robot        m_robot = null;
        private Rectangle    m_rect = null;
        private MediaTracker m_mediaTracker = null;

        public TransparentSplashScreen(String strImagePath, Dimension dimImageSize)
        {
            super(new Frame());
           
            setLocation((getToolkit().getScreenSize().width - dimImageSize.width) / 2,
                        (getToolkit().getScreenSize().height - dimImageSize.height) / 2);
            setSize(dimImageSize);

            if(strImagePath!=null && dimImageSize!=null)
            {
                m_rect = new Rectangle(getLocation().x, getLocation().y, getSize().width, getSize().height);
           
                try
                {
                    m_robot = new Robot();
                    m_imageCapture = m_robot.createScreenCapture(m_rect);
                }
                catch(AWTException e)
                {
                }
           
                m_imageSplash = getToolkit().getImage(strImagePath);
                m_mediaTracker = new MediaTracker(this);
                m_mediaTracker.addImage(m_imageSplash, 0);
                m_mediaTracker.addImage(m_imageCapture, 1);

                try
                {
                    m_mediaTracker.waitForAll();
                }
                catch(InterruptedException e)
                {
                }
            }
        }

        public void paint(Graphics g)
        {
            Image imgTemp = createImage(m_dimImageSize.width, m_dimImageSize.height);
            Graphics gfxTemp = imgTemp.getGraphics();
           
            gfxTemp.drawImage(m_imageCapture, 0, 0, m_imageCapture.getWidth(this), m_imageCapture.getHeight(this), this);
            gfxTemp.drawImage(m_imageSplash, 0, 0, m_dimImageSize.width, m_dimImageSize.height, this);
           
            g.drawImage(imgTemp, 0, 0, imgTemp.getWidth(this), imgTemp.getHeight(this), this);
        }

        public void start()
        {
            setVisible(true);
        }

        public void destroy()
        {
            setVisible(false);
            dispose();
        }
    }


}
Avatar billede simonvalter Praktikant
27. juli 2005 - 17:55 #2
jeg forstår ikke helt ", så river den hele app den.."  Hvis du mener den lukker hele programmet ned så er det pga denne her som skal fjernes:

System.exit(0)
Avatar billede lmdthel Nybegynder
27. juli 2005 - 18:05 #3
Det har du nok ret i..

Tror du den kan implementeres så den lukker splash ned, når det første vindue åbner ?
Avatar billede simonvalter Praktikant
27. juli 2005 - 18:12 #4
Ja det burde være muligt. Prøv og paste den kode hvor problemet opstår så kan jeg teste det.
Avatar billede simonvalter Praktikant
27. juli 2005 - 19:05 #5
Jeg kan iøvrigt ikke se noget transparent? måske er det kun noget der virker under windows. eller har det noget at gøre med det type billede man bruger?

Her er en rigtig god artikel med tilhørende kode som jeg vil anbefale dig at læse. Den er optimeret for hastighed, designet er bedre osv.

http://www.javalobby.org/java/forums/t18109.html

Hvis du stadig vil gøre den transparent.. hvilket åbenbart ikke virker her så skal du bruge koden der tager screenshot

m_robot = new Robot();
                    m_imageCapture = m_robot.createScreenCapture(m_rect);


koden der indlæser screenshot og eget billede

    m_imageSplash = getToolkit().getImage(strImagePath);
                m_mediaTracker = new MediaTracker(this);
                m_mediaTracker.addImage(m_imageSplash, 0);
                m_mediaTracker.addImage(m_imageCapture, 1);


og koden der tegner det

Image imgTemp = createImage(m_dimImageSize.width, m_dimImageSize.height);
            Graphics gfxTemp = imgTemp.getGraphics();
           
            gfxTemp.drawImage(m_imageCapture, 0, 0, m_imageCapture.getWidth(this), m_imageCapture.getHeight(this), this);
            gfxTemp.drawImage(m_imageSplash, 0, 0, m_dimImageSize.width, m_dimImageSize.height, this);
           
            g.drawImage(imgTemp, 0, 0, imgTemp.getWidth(this), imgTemp.getHeight(this), this);


Koden det følger med artiklen virker ihvertfald fint.
Avatar billede simonvalter Praktikant
08. august 2005 - 17:45 #6
ok?
Avatar billede simonvalter Praktikant
26. august 2005 - 06:58 #7
lmdthel ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester