IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Graphisme Java Discussion :

Appliquer un fade-in / fade-out à un JPanel ?


Sujet :

Graphisme Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 44
    Points : 29
    Points
    29
    Par défaut Appliquer un fade-in / fade-out à un JPanel ?
    Bonjour tout le monde !

    Tout est dans le titre : Est-il possible d'appliquer un fade-in / fade-out
    quand on fait apparaitre un JPanel avec tous ses composants et quand on le fait disparaitre ?

    Merci d'avance pour vos réponses toujours judicieuses.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 867
    Points : 22 922
    Points
    22 922
    Billets dans le blog
    52
    Par défaut
    C'est possible mais ca demande un peu de boulot. La methode habituelle consiste a rendre le JPanel dans une BufferedImage puis a afficher cette image par dessus la gui avec la bonne composite (et/ou deformation puisqu'il est possible de faire des tas d'effets de cette maniere) en utilisant un Timer Swing. Une maniere plus avancee est d'utiliser le Timing Framework de Chet Haase. Tout ceci est explique de maniere general dans le livre "Filthy Rich Clients" (dispo uniquement en anglais) de Chet Haase et Romain Guy (gfx sur ce forum). Les exemples du livre sont dispos gratuitement sur le site http://filthyrichclients.org/

  3. #3
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Citation Envoyé par bouye Voir le message
    C'est possible mais ca demande un peu de boulot. La methode habituelle consiste a rendre le JPanel dans une BufferedImage puis a afficher cette image par dessus la gui avec la bonne composite (et/ou deformation puisqu'il est possible de faire des tas d'effets de cette maniere) en utilisant un Timer Swing. Une maniere plus avancee est d'utiliser le Timing Frameworkd de Chet Haase. Tout ceci est explique de maniere general dans le livre "Filthy Rich Clients" (dispo uniquement en anglais) de Chet Haase et Romain Guy (gfx sur ce forum). Les exemples du livre sont dispos gratuitement sur le site http://filthyrichclients.org/
    Ce bouquin a l'air trés sympathique.
    Je sens que je vais me le prendre...

    Merci pour ce lien.

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Pour les pressés, la solution la plus simple est d'utiliser le JXPanel de SwingX (swingx.dev.java.net). Il est aussi facile d'écrire sa propre version en rédigeant un RepaintManager assez simple (cette technique est décrite dans le livre et le code source est dispo sur le site mentionné par bouye).

  5. #5
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    salut,

    alors j'ai le bouquin par contre y a un truc que j'ai pas du piger (qui doit etre due à une faiblesse de mon anglais et non pas au bouquin qui est génial et que je recommande en passant ) .

    J'ai repris l'exemple du fadingButton avec le Timer : si j'arrive à faire le fade-in, le fade-out ne fonctionne pas. c'est a dire que le carré rouge "apparait" progressivement mais ne redevient pas transparent

    je joins le code ci-dessous (j'ai simplifié au max), si quelqu'un peut me dire ou est ce que je me trompe, j'en serai ravi.

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
     
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
     
    import javax.swing.JPanel;
    import javax.swing.JWindow;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;
     
    public class FadingChart extends JWindow implements ActionListener {
     
    	float alpha = 1.0f; // current opacity of button
    	Timer timer; // for later start/stop actions
    	int animationDuration = 10000; // each animation will take 2 seconds
    	long animationStartTime; // start time for each animation
    	BufferedImage charImage = null;
    	JPanel chart;
     
    	public FadingChart() {
    		super();
    		timer = new Timer(100, this);
    		chart = new JPanel();
    		chart.setBackground(Color.red);
    		this.getContentPane().add(chart);
    		this.setLocation(100, 100);
    	}
     
    	public void go() {
    		if (!timer.isRunning()) {
    			animationStartTime = System.nanoTime() / 1000000;
    			// this.setText("Stop Animation");
    			timer.start();
     
    		}
    	}
     
    	public void paint(Graphics g) {
    		// Create an image for the button graphics if necessary
    		if (charImage == null || charImage.getWidth() != getWidth()
    				|| charImage.getHeight() != getHeight()) {
    			charImage = getGraphicsConfiguration().createCompatibleImage(
    					getWidth(), getHeight());
    			System.out.println("create once");
    		}
     
    		Graphics gch = chart.getGraphics();
     
    		Graphics gButton = charImage.getGraphics();
    		gButton.setClip(gch.getClip());
     
    		// Have the superclass render the button for us
    		// super.paint(gButton);
    		super.paint(gButton);
     
    		// Make the graphics object sent to this paint() method translucent
    		System.out.println("alpha" + (1 - alpha));
    		Graphics2D g2d = (Graphics2D) g;
    		g2d.setComposite(AlphaComposite.SrcOver.derive(1 - alpha));
    		g2d.drawImage(charImage, 0, 0, null);
     
    	}
     
    	public void actionPerformed(ActionEvent ae) {
     
    			// timer event
    			// calculate the elapsed fraction
    			long currentTime = System.nanoTime() / 1000000;
    			long totalTime = currentTime - animationStartTime;
    			if (totalTime > animationDuration) {
    				animationStartTime = currentTime;
    			}
    			float fraction = (float) totalTime / animationDuration;
    			fraction = Math.min(1.0f, fraction);
    			// This calculation will cause alpha to go from 1 to 0 and back to 1
    			// as the fraction goes from 0 to 1
    			alpha = Math.abs(1 - (2 * fraction));
    			repaint();
    	}
     
    	private static void createAndShowGUI() {
    		FadingChart fc = new FadingChart();
    		fc.setSize(200, 200);
    		fc.setVisible(true);
    		fc.go();
    	}
     
    	public static void main(String args[]) {
    		 Runnable doCreateAndShowGUI = new Runnable() {
    		 public void run() {
    		 createAndShowGUI();
    		 }
    		 };
    		 SwingUtilities.invokeLater(doCreateAndShowGUI);
     
    	}
    }

Discussions similaires

  1. [CSS 3] Fade in et out entre 2 images
    Par Karly dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 21/10/2012, 12h51
  2. [Debutant] Fade in / Fade out sur des images
    Par Cromwell dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2010, 19h47
  3. Background Fade-In / Fade-Out sur une div
    Par isa28 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 24/10/2008, 22h51
  4. Fade In/Fade Out avec div avec background Image
    Par Cdic83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/08/2008, 22h02
  5. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo