Startbildschirm

Status
Nicht offen für weitere Antworten.

Kaladial

Bekanntes Mitglied
hi

also ich hab in meinem programm nen startbildschirm einbauen wollen...
(in meinem richtigen code geht der code so, in dem testprogramm net so ganz)



Code:
import java.awt.Rectangle;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;

public class Screen2 extends JPanel{
	
	private static JLabel splashLabel = null;
    private static JWindow splashScreen = null;	
	private static final String SPLASHIMAGEPATH = new String("pix/images/splash.jpg");
    private static JFrame frame = null;
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		createSplashScreen();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
              	showSplashScreen();
            }
        });
      	hideSplashScreen();
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
			  //rest halt
			}
		});
	}
    
	public static void hideSplashScreen() {
        splashScreen.setVisible(false);
        splashScreen = null;
        splashLabel = null;
    }
    
	private static void createSplashScreen() {
        if (SPLASHIMAGEPATH!=null) {
            splashLabel = new JLabel(new ImageIcon(SPLASHIMAGEPATH));
            splashScreen = new JWindow(getFrame());
            splashScreen.getContentPane().add(splashLabel);
            splashScreen.pack();
            // Plazieren:
            Rectangle screenRect = new JFrame().getGraphicsConfiguration().getBounds();
            splashScreen.setLocation(
                  screenRect.x + screenRect.width/2  - splashScreen.getSize().width/2,
                  screenRect.y + screenRect.height/2 - splashScreen.getSize().height/2);

        }
    }
    public static JFrame getFrame() {
        return frame;
    }

    private static void showSplashScreen() {
        splashScreen.show();
    }


}

das problem was ich hab: der splashscreen wird zwar angezeigt aber nur sehr kurz ...
wie bekomm ich das nu hin das das bild angezeigt wird dann soll ne 3-5 sec pause kommen und dann soll das programm erst in die normale oberfläche übergehen...

thx für hilfe
Kala
 

Wildcard

Top Contributor
Mit Java 6 kannst du direkt einen Splashscreen anzeigen lassen (noch bevor die VM hochgefahren ist).
 

Kaladial

Bekanntes Mitglied
??? also eigentlich will ich ja nun nen delay weil anzeigen tut er sie ja mein bild nur halt zu kurz...
 

Kaladial

Bekanntes Mitglied
hmmm also so richtig schlau werd ich aus dem programm auch net (also aus dem beispiel)

also wenn ich mir das runter saug und per hand compiliere bekomme ich die fehlermeldung: Exception in thread "main" java.lang.NoClassDefFoundError: SplashDemo

und wenn ich das programm mit eclipse compilier kommt entweder gar kein splash screen oder die meldung (wenn ich parameter angeb): SplashScreen.getSplashScreen() returned null

hmmm also irgendwie seltsam...
 
G

Guest

Gast
Warum wollt ihr ihn von seinem fertigem Splash abbringen? :cry:

So ist es doch abwärtskompatibler. Alles was du machen musst ist am ende deiner methode bzw vor dem schließen des Screens Thread.sleep( Zeit in ms ); einfügen
 

L-ectron-X

Gesperrter Benutzer
Und wie?

Es gibt sicher Forenbenutzer, die nach dir das gleiche Problem haben und nach einer Antwort suchen!
In einem Forum sollte es heißen: "Nicht nur nehmen sondern auch geben."
 

Kaladial

Bekanntes Mitglied
ok hier meine lösung:

Aufruf:
Code:
public static void main(String[] args) {
		SplashScreen splashScreen = null; 
        try { 
        	splashScreen = new SplashScreen("images/splash.jpg");
        } catch(Exception e) { 
                e.printStackTrace(); 
        } 
        
        do{}while(!splashScreen.isBlendInRdy);
        //rest - code
        
	}

SplashPainter.java :
Code:
package AVS3;

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 

import javax.swing.JLabel; 

public class SplashPainter extends JLabel { 
	private Image image; 
        
	public void setImage(Image image){ 
		this.image = image; 
		setPreferredSize(new Dimension(image.getWidth(null),image.getHeight(null))); 
	} 
	
	@Override 
	public void paintComponent(Graphics g){ 
		super.paintComponents(g); 
		g.drawImage(image,0,0,this); 
	} 
}

SplashScreen.java:
Code:
package AVS3;

import java.awt.AWTException; 
import java.awt.AlphaComposite; 
import java.awt.Dimension; 
import java.awt.Graphics2D; 
import java.awt.GraphicsEnvironment; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.URL; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JWindow; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 
import com.sun.image.codec.jpeg.*;
import java.io.*;

public class SplashScreen implements ActionListener{ 
	// desktop 
	private final BufferedImage background; 

	// Your logo 
	private final BufferedImage image; 

	// actual image 
	private BufferedImage currentImage; 

	private SplashPainter label; 

	private final int speed = 1000 / 20; 
        
	public boolean isBlendInRdy = false;
    /** 
    * Duration in Time Mills 
    */ 
	private float duration = 100.0f; 

	private long startTime = 0; 

	private boolean isBlendIn = true; 

	private final Timer timer; 

	//Funktion zum Laden eines Bildes
	protected BufferedImage loadTheImage(String pfad){
		BufferedImage img=null; //das Bild
			
		try {
			String dateiname=new String(pfad);
			FileInputStream in = new FileInputStream( dateiname ); //aus Stream laden
			JPEGImageDecoder decoder= JPEGCodec.createJPEGDecoder(in); //der Decoder
			img = decoder.decodeAsBufferedImage(); //laden
			in.close();
		}catch( Exception e ){
			System.out.print(e);
		}		
		return img; //geladenes Bild zurückgeben
	}
        
	public SplashScreen(String path) throws IOException, AWTException { 
		image = loadTheImage(path); 

		currentImage = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().createCompatibleImage(image.getWidth(null), image.getHeight(null)); 
        	
		final Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); 
		final int x = (int) (screenDimension.getWidth() / 2 - image.getWidth(null) / 2); 
		final int y = (int) (screenDimension.getHeight() / 2 - image.getHeight(null) / 2); 
		final int w = image.getWidth(null); 
		final int h = image.getHeight(null); 
		
		final Robot robot = new Robot(); 
		final Rectangle rectangle = new Rectangle(x, y, w, h); 
		background = robot.createScreenCapture(rectangle); 
		drawImage(0f); 

		label = new SplashPainter(); 
		label.setImage(background); 
		final JWindow f = new JWindow(new JFrame()); 
		f.getContentPane().add(label); 
		f.pack(); 
		f.setLocationRelativeTo(null); 

		timer = new Timer(speed, this); 
		timer.setCoalesce(true); 
		timer.start(); 
		startTime = System.currentTimeMillis(); 
		f.setVisible(true); 
	} 	

	public void blendOut(){ 
		isBlendIn = false; 
		startTime = System.currentTimeMillis(); 
		timer.start(); 
	} 

	public void actionPerformed(ActionEvent e){
		float percent; 
        	
		if (isBlendIn){ 
			percent = (System.currentTimeMillis() - startTime) / duration; 
			percent = Math.min(1.0f, percent); 
		}else{ 
			percent = (System.currentTimeMillis() - startTime) / duration; 
			percent = Math.min(1.0f, percent); 
			percent = 1.0f - percent; 
		} 

		float alphaValue = percent; 

		if (percent >= 1.0){ 
			long rest = (System.currentTimeMillis() - startTime);
			if(rest>(duration+2400)){
				timer.stop(); 
				isBlendInRdy=true;
			}
			// blendOut(); // Einkommentieren damit die animation sofort wieder 
			// ausgeblendet wird 
		}else if (alphaValue <= 0.0f){ 
			timer.stop(); 
			SwingUtilities.getWindowAncestor(label).dispose(); 
		} 

		drawImage(alphaValue); 
		label.setImage(currentImage); 
		label.repaint(); 
	} 	

	/** 
	 * Draws Background, then draws image over it 
	 * 
	 * @param alphaValue 
	 */ 
	private void drawImage(float alphaValue){
		final Graphics2D g2d = (Graphics2D) currentImage.getGraphics(); 
		g2d.drawImage(background, 0, 0, null); 
		g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alphaValue)); 
		g2d.drawImage(image, 0, 0, null); 
		g2d.dispose(); 
	} 

	public static void main(String[] args) throws Exception{ 
		new SplashScreen("splash.jpg"); 
	} 
}

mfg Kala
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Anfängerfrage: Startbildschirm AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben