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

AWT/Swing Java Discussion :

Amélioration d'une classe splashscreen déjà existente


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    HNT
    HNT est déconnecté
    Membre éclairé Avatar de HNT
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 448
    Par défaut Amélioration d'une classe splashscreen déjà existente
    Bonjour,

    Pour les besoins d'une apllication, j'ai crée ma propre classe SplashScreen que je vous expose ci-après. Elle fonctionne bien mais je voudrais l'améliorer. En fait j'ai été inspiré par l'application de Romain Guy "Sales Manager Demo". Quand on va dans "New Sales" et qu'on clique sur "Perform Sale", une animation apparait sur la fenêtre avec une barre de progression infinie. Une couche d'alpha dont la luminosité est réglée (pour être plus ou moins opaque) est ajoutée à la fenêtre. Je voudrais savoir comment faire pour ajouter également cette couche à mon splashscreen. J'ai déjà analysé le code disponible mais j'avoue ne pas avoir trouver le truc (sinon je ne posterai pas, logique)

    Bon voila ma classe :
    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
     
    package core.maj;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.util.Date;
    import javax.swing.JFrame;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import core.util.MonException;
     
    public class MonSplashScreen extends JFrame
    {
    	private String texte;
    	private Color arrierePlan;
    	private Color couleurTexte;
    	private BufferedImage img;
    	private final int LARGEUR;
    	private final int HAUTEUR_COMPLET;
    	private final int HAUTEUR_IMAGE;
    	private static final long serialVersionUID = 7121460305734206954L;
     
    	public MonSplashScreen(final String EMPLACEMENT_IMAGE, String texte) throws MonException
    	{
    		super();
    		try
    		{
    			this.texte = texte;
    			this.arrierePlan = Color.GRAY;
    			this.couleurTexte = Color.BLACK;
    			this.img = JPEGCodec.createJPEGDecoder(new BufferedInputStream(new FileInputStream(EMPLACEMENT_IMAGE))).decodeAsBufferedImage();
    			this.LARGEUR = this.img.getWidth(this);
    			this.HAUTEUR_IMAGE = this.img.getHeight(this);
    			this.HAUTEUR_COMPLET = this.HAUTEUR_IMAGE + 15;
    			this.definirPropriete();
    		}
    		catch (Exception ex)
    		{
    			throw new MonException("Pour en savoir plus reportez vous au fichier de log nommé " + new Date().toString(), ex, "Impossible de lire le fichier lifras.jpg");
    		}
    	}
     
    	public MonSplashScreen(final String EMPLACEMENT_IMAGE, Color arrierePlan, String texte) throws MonException
    	{
    		this(EMPLACEMENT_IMAGE, texte);
    		this.couleurTexte = Color.BLACK;
    	}
     
    	public MonSplashScreen(final String EMPLACEMENT_IMAGE, Color arrierePlan, Color couleurTexte, String texte) throws MonException
    	{
    		this(EMPLACEMENT_IMAGE, texte);
    		this.arrierePlan = arrierePlan;
    		this.couleurTexte = couleurTexte;
    	}
     
    	private void definirPropriete()
    	{
    		setSize(this.LARGEUR, this.HAUTEUR_COMPLET);
    		setLocationRelativeTo(getParent());
    		setUndecorated(true);
    		setFocusable(false);
    		setEnabled(false);
    		setResizable(false);
    		setVisible(true);
    	}
     
    	public void definirTexteBas(String texte)
    	{
    		this.texte = texte;
    		this.repaint();
    	}
     
    	public void definirCouleurBg(Color arrierePlan)
    	{
    		this.arrierePlan = arrierePlan;
    		this.repaint();
    	}
     
    	public void definirCouleurTexte(Color texte)
    	{
    		this.couleurTexte = texte;
    		this.repaint();
    	}
     
    	public void paint(Graphics g)
    	{
    		super.paint(g);
    		g.setColor(this.arrierePlan);
    		g.drawRect(0, 0, this.LARGEUR, this.HAUTEUR_COMPLET);
    		g.drawImage(this.img, 0, 0, this.LARGEUR, this.HAUTEUR_IMAGE, this);
    		g.setColor(this.couleurTexte);
    		g.drawString(this.texte, 3, this.HAUTEUR_COMPLET - 4);
    	}
    }
    Comment la modifier simplement pour ajouter cette couche par-dessus l'image ? (couche +/- transparente)

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    grosso modo tu l'ajoute au GlassPane de ta JFrame (ou JWindow ou JDialog) et tu le lances avec l'appel à sa méthode start();
    Puis pour le stopper tu fais appel à la méhode stop();

    Accessoirement utilise la version contenue dans swingfx qui est largement plus à jour, et de préférence le PerformanceInfiniteProgressPanel (qui se manipule avec du setVisible(true/false) à la place du start/stop) plutôt que le InifiniteProgressPanel

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Pour faire de l'alpha il faut soit utiliser une couleur transparente (par exemple new Color(1.0f, 1.0f, 1.0f, 0.5f) pour un blanc transparent à 50%) soit utiliser l'AlphaComposite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void paint(Graphics g) {
      // ...
      Graphics2D g2 = (Graphics2D) g;
      Composite c = g2.getComposite();
      g2.setComposite(AlphaComposite.getIntance(AlphaComposite.SRC_OVER, 0.5f));
      // tout ce que l'on dessine maintenant sera transparent à 50%
      g2.setComposite(c);
    }

  4. #4
    HNT
    HNT est déconnecté
    Membre éclairé Avatar de HNT
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 448
    Par défaut
    Merci beaucoup, ça marche impecablement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. amélioration d'une classe
    Par deubelte dans le forum C++
    Réponses: 12
    Dernier message: 19/10/2007, 10h36
  2. Réponses: 14
    Dernier message: 15/01/2004, 01h15
  3. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28
  4. Variable d'une Classe Ancêtre
    Par Génie dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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