# JWindows einblenden/animieren



## Lümmel (29. Sep 2008)

Hallo,

wie kann ich ein JWindows animieren (fade-in /out effekt) für einen Splash-screen?


----------



## Wildcard (29. Sep 2008)

Hier ein halbgares Projekt das ich mal angefangen habe. Ist ein wenig aufwendig, weil du mit Screenshots und Überzeichnen arbeiten musst.
Der FadeIn Animator sollte dir ein Beispiel geben.
http://jutzig.de/java/jnotification/


----------



## Lümmel (30. Sep 2008)

Wildcard hat gesagt.:
			
		

> Hier ein halbgares Projekt das ich mal angefangen habe. Ist ein wenig aufwendig, weil du mit Screenshots und Überzeichnen arbeiten musst.
> Der FadeIn Animator sollte dir ein Beispiel geben.
> http://jutzig.de/java/jnotification/



die paintComponent Methode von JWindow überschreiben geht nicht?


----------



## Wildcard (30. Sep 2008)

JWindow hat gar keine paintComponent. JWindow ist ein Zwischending aus Heavyweight und Lightweight. Es zeichnet Lightweight Komponenten, besteht aber aus einer Heavyweight Komponente. Alles was Heavyweight ist, kennt keine Transparenz. 
Um die Sache abzukürzen: 
Bis auf die neueste RC Version von Java 6, die noch nicht zum Produktiveinsatz taugt, unterstützt Swing keine transparenten Fenster. Das muss also mit Screenshots vom Hintergrund und überzeichnen simuliert werden.


----------



## Lümmel (30. Sep 2008)

Wildcard hat gesagt.:
			
		

> JWindow hat gar keine paintComponent. JWindow ist ein Zwischending aus Heavyweight und Lightweight. Es zeichnet Lightweight Komponenten, besteht aber aus einer Heavyweight Komponente. Alles was Heavyweight ist, kennt keine Transparenz.
> Um die Sache abzukürzen:
> Bis auf die neueste RC Version von Java 6, die noch nicht zum Produktiveinsatz taugt, unterstützt Swing keine transparenten Fenster. Das muss also mit Screenshots vom Hintergrund und überzeichnen simuliert werden.



sorry das ich das jetzt erst sge aber ich benutze JAVA 6_10 RC2 Build 32 glaub ich... sprich transparente Fenster etc hab ich schon gemacht. ABER wenn du meinst das geht mit JWindow net ...


----------



## Lümmel (30. Sep 2008)

und die GlassPane des JWindow auf setVisible(false) geht nicht ?? und dann eben eine Bilddatei(splash...) laden und via AlphaComposite setzte ich die durchsichtigkeit des Bildes könnte doch gehen oder?


----------



## Wildcard (30. Sep 2008)

Lümmel hat gesagt.:
			
		

> sorry das ich das jetzt erst sge aber ich benutze JAVA 6_10 RC2 Build 32 glaub ich... sprich transparente Fenster etc hab ich schon gemacht. ABER wenn du meinst das geht mit JWindow net ...


Doch, mit diesem Pseudo Java 7 geht das schon. Würde ich allerdings nicht verwenden, da sich kein Endanwender eine RC Version installieren sollte.


----------



## Lümmel (30. Sep 2008)

Wildcard hat gesagt.:
			
		

> Lümmel hat gesagt.:
> 
> 
> 
> ...


 ich bin der Zeit eben voraus :wink:  

RC2 finde ich ziemlich stabil bei mir. Wie würdest du das dann mit Java 7 machen und das Fenster transparent animieren? mit obiger GlassPane Methode? Wobei ich da ja auch ein JFrame nehmen kann mit ner GlassPane drauf...


----------



## Wildcard (30. Sep 2008)

Lümmel hat gesagt.:
			
		

> RC2 finde ich ziemlich stabil bei mir. Wie würdest du das dann mit Java 7 machen und das Fenster transparent animieren? mit obiger GlassPane Methode? Wobei ich da ja auch ein JFrame nehmen kann mit ner GlassPane drauf...


Warum fragst du das mich? Du verwendest doch den RC.
GlassPane alleine hilft dir sowieso nichts, solange das Window selbst noch Opaque ist.


----------



## Lümmel (30. Sep 2008)

Wildcard hat gesagt.:
			
		

> Lümmel hat gesagt.:
> 
> 
> 
> ...



ich hab das JFrame nun auf FAST transparent gesetzt

und auf die glasspane ein rechteck gemalt. Das Problem ist nur, dass sich die Transparenz auch auf die GlassPane aus wirkt  :lol: 

Da das GlassPane unterhalb JFrame in der Hierarchie ist und ich das JFrame auf Alpha 100% setze dürfte auch nie ein Bild in der GlassPane sichtbar sein... :/   :bloed:


----------



## Wildcard (30. Sep 2008)

Moment... Du hast einen JFrame der deine Anwendung darstellt? Und die GlassPane soll ein Bild darstellen das du eingangs als Splashscreen bezeichnest? Warum soll ein Splashscreen angezeigt werden wenn die Anwendung doch schon sichtbar ist? Das widerspricht sich ein wenig.


----------



## Luemmmel (30. Sep 2008)

Wildcard hat gesagt.:
			
		

> Moment... Du hast einen JFrame der deine Anwendung darstellt? Und die GlassPane soll ein Bild darstellen das du eingangs als Splashscreen bezeichnest? Warum soll ein Splashscreen angezeigt werden wenn die Anwendung doch schon sichtbar ist? Das widerspricht sich ein wenig.


das war doch nur ein Test...

wie auch immer was ich vorhabe geht nicht siehe eingangs...


----------



## Wildcard (30. Sep 2008)

Doch es geht, wie bereits gesagt. Entweder mit dem RC und schrittweise Alpha Wert erhöhen, oder mit Screenshots und Übereichnen wie im Codebeispiel.


----------



## The_S (1. Okt 2008)

@Wildcard

wie reagiert deine Lib denn, wenn sich im Hintergrund eine Animation abspielt? Diese wirst du vermutlich nicht bei deiner Transparenz weiter spielen lassen können!?


----------



## Wildcard (1. Okt 2008)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> wie reagiert deine Lib denn, wenn sich im Hintergrund eine Animation abspielt? Diese wirst du vermutlich nicht bei deiner Transparenz weiter spielen lassen können!?


Nein, das geht nicht. Ist nunmal ein Hack für eine kleine Demo Animation, ähnlich der 'transparenten' Gnome Konsole bevor es die Composition Window Manager gab.


----------



## The_S (1. Okt 2008)

ok, danke


----------



## OberLuemmel (2. Okt 2008)

Wildcard hat gesagt.:
			
		

> Doch es geht, wie bereits gesagt. Entweder mit dem RC und schrittweise Alpha Wert erhöhen, oder mit Screenshots und Übereichnen wie im Codebeispiel.



also könnte ich den alpha wert im Konstruktor des einzufadenden Fensters so erhöhen?:

```
try
		{
			AWTUtilities.setWindowOpacity(this, 0.1f);
			Thread.sleep(1100);
			AWTUtilities.setWindowOpacity(this, 0.2f);
			Thread.sleep(1100);
			AWTUtilities.setWindowOpacity(this, 0.3f);
			Thread.sleep(1100);
			AWTUtilities.setWindowOpacity(this, 0.4f);
			Thread.sleep(1300);
			AWTUtilities.setWindowOpacity(this, 0.5f);
			Thread.sleep(1100);
			AWTUtilities.setWindowOpacity(this, 0.6f);
			Thread.sleep(1300);
			AWTUtilities.setWindowOpacity(this, 0.7f);
			Thread.sleep(1300);
			AWTUtilities.setWindowOpacity(this, 0.8f);
			Thread.sleep(1300);
			AWTUtilities.setWindowOpacity(this, 0.9f);
		}
		catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
```

das geht natürlich so schnell, dass die "fade-animation" nicht sichtbar ist...trotz 1000ms wartezeit?? wie würdest du denn das richtig animieren das faden?


----------



## Wildcard (2. Okt 2008)

So würdest du den EDT lahm legen, da muss schon ein separater Thread her, der das Setzen des Alpha Werts dann mit invokeLater synchronisiert.


----------



## Oberlümmel (2. Okt 2008)

Wildcard hat gesagt.:
			
		

> So würdest du den EDT lahm legen, da muss schon ein separater Thread her, der das Setzen des Alpha Werts dann mit invokeLater synchronisiert.



yo klar meine Frage war nur warum ist die fading animation nicht sichtbar?? mit 1 sekunde abstand zu jeder alpha erhöhung?


----------



## Wildcard (2. Okt 2008)

Weil du den EDT nicht schlafen legen darfst. Wer soll denn zeichnen wenn der Thread pennt?


----------

