Splashscreen mit Progressbar/Ladebalken

FreakyM

Mitglied
Hallo an Alle,

ich versuche verzweifelt eine Implementierung eines Splashscreens mit integriertem Ladebalken zu finden...
Ich habe jetzt, gefühlt, Google leer gesucht aber nichts gefunden was meinen Vorstellungen entspricht :( Habe sogar den JDownloader-SourceCode durchgeschaut, jedoch finde ich hier nicht die Stelle, in welcher der Splashscreen implementiert ist (jemand anders vielleicht?)

Ich suche keinen reinen Splashscreen, welcher nur für x Sekunden ein Bild anzeigt, sondern tatsächlich einen mit ProgressBar/ladebalken. Ich sage das dazu, da sich die Leute auf manchen Seiten nicht einig waren wie ein Splashscreen definiert ist, also mit oder ohne Ladebalken.

Gibt es den keinen Splashscreen welchem man sowas wie "Actions" übergeben/adden kann und er dann selbstständig Multithreaded, oder wie auch immer, diese abarbeitet und dementsprechend seine Prozentzahl anpasst?

Oder kennt jemand eine "professionelle" Implementierung eines Splashscreens welche schon sehr viele Möglichkeiten hat?


Dankeschön im Vorraus ;)

Gruß
Dennis
 
Zuletzt bearbeitet:
Moin ^^

Mal ne doofe Frage. Warum bastelst du dir nicht selber einen? Is nur ein Bild und ein Ladebalken. Das kann man auch mal eben selbst zusammenklimpern ...
 
Hallo,

schau mal hier:
Java:
package de.tutorials.training;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.SplashScreen;
import java.util.concurrent.TimeUnit;

import javax.swing.JFrame;

public class SplashScreenExample{

  public static void main(String[] args) {
    new App().launch();
  }
  
  static class App{
    public void launch(){
      startServices();
      startUI();  
    }

    private void startServices() {
      System.out.println("Starting services...");
      
      StartupProgressIndicator startupProgressIndicator = new StartupProgressIndicator(SplashScreen.getSplashScreen());

      int numberOfServices = 10;
      
      for(int i =1 ; i<= numberOfServices; i++){
        sleepRandomly();
        startupProgressIndicator.updateStartupProgress(i / (float)numberOfServices, "Starting Service: " + i);
      }
      
      System.out.println("Started services.");
    }

    private void sleepRandomly() {
      try {
        TimeUnit.MILLISECONDS.sleep((int)(Math.random() * 1000));
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }

    private void startUI() {
      System.out.println("Starting ui...");
      EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
          new AppFrame().setVisible(true);
          System.out.println("Started ui.");
        }
      });
    }
  }
  
  static class StartupProgressIndicator{
    
    private final SplashScreen splashScreen;
    
    private Graphics2D g;
    
    public StartupProgressIndicator(SplashScreen splashScreen) {
      this.splashScreen = splashScreen;
      setupGraphics();
    }


    private void setupGraphics() {
      this.g = this.splashScreen.createGraphics();
      this.g.setFont(new Font("ARIAL",Font.BOLD,12));
    }


    public void updateStartupProgress(float progress, String progressMessage) {
      Rectangle splashBounds = splashScreen.getBounds();
      int progressBarHeight = g.getFontMetrics().getHeight();
      int progressBarWidth = (int)(splashBounds.width * progress);
      int progressBarStartY = splashBounds.height-progressBarHeight;
      
      g.setColor(Color.WHITE);
      g.fillRect(0, progressBarStartY, splashBounds.width, progressBarHeight);
      
      g.setColor(Color.ORANGE);
      g.fillRect(0, progressBarStartY, progressBarWidth, progressBarHeight);
      
      g.setColor(Color.BLACK);
      g.drawString(progressMessage, 0, splashBounds.height-2);
      this.splashScreen.update();
    }
  }
  
    
  static class AppFrame extends JFrame{
    public AppFrame(){
      super("AppFrame");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      setSize(640, 480);
    }
  }
}

Auführen mit jvm-Parameter -splash:

Code:
java -splash:res/tutorials_headerlogo_white_bg.png -cp . de.tutorials.training.SplashScreenExample

Siehe auch:
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/


Gruß Tom
 

Anhänge

  • tutorials_headerlogo_white_bg.png
    tutorials_headerlogo_white_bg.png
    3,7 KB · Aufrufe: 33
  • splash_progress.PNG
    splash_progress.PNG
    5,5 KB · Aufrufe: 30
Zurück