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 :

[GUI][SWING][!L&F] Customiser soi-même Swing!


Sujet :

AWT/Swing Java

  1. #1
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut [GUI][SWING][!L&F] Customiser soi-même Swing!
    Comme je l'ai mentionné dans le titre, je souhaite customiser quelques objets SWING pour mon appli: JLabel, JTextField, JCombobox.

    Il existe déjà pas mal de theads à ce sujet (nottament les L&F), mais dans mon cas, je souhaite faire l'implémentation autrement, c'est à dire en faisant tout à la main.

    Mais je ne suis pas vraiment satisfait de mon implémentation: Je n'aime pas trop utiliser AlphaComposite car si la valeur est proche de 1, la fonte peut ne pas etre assez visible. Si au contraire la valeur est proche de 0, alors les couleurs sont trop altérées.

    Avez vous des idées pour ne pas avoir ce problème? Existe-t-il d'autres solutions plus simples?

    Je poste un exemple de 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
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    import javax.swing.JTextField;
     
    public class CustomizedJTextField extends JTextField {
    	private Color blue = new Color(96, 96, 255);
    	private Color darkBlue = new Color(0, 0, 64);
     
    	public CustomizedJTextField() {
    		super();
    		this.setLayout(null);
    		this.setOpaque(false);
     
    		this.setBorder(null);
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		Graphics2D graphics2d = (Graphics2D) g;
     
    		graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f));
    		graphics2d.setColor(Color.black);
    		graphics2d.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
     
    		graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
    		GradientPaint gradientpaint = new GradientPaint(this.getHeight() / 2, 0.0F, blue, this.getHeight() / 2, this.getHeight(), darkBlue);		
    		graphics2d.setPaint(gradientpaint);
     
    		graphics2d.fillRoundRect(0, 0, this.getWidth()-1, this.getHeight()-2, 10, 10);
    	}
    }

    Dans ce JTextField customisé, j'ai essayé de mettre un gradient horizontal, d'arrondir les bords, et d'ajouter un effet d'ombre.

    Après avoir résolu mon problème, j'aimerai:
    - Mettre en place un système de marge intérieure.
    - Faire un effet 3D du fond de l'objet.


    Merci pour votre aide!


    Billy

  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
    Bon aller deux trois pistes sur tout ce qui est dessin avec Java2D (chuis un peu short donc je vais juste de donner des liens qui te permettront d'en comprendre plus)

    Le blog de chris Campbell

    http://weblogs.java.net/blog/campbell/

    En particulier ces trois posts:
    http://weblogs.java.net/blog/campbel...asy_piece.html
    http://weblogs.java.net/blog/campbel...d_tricker.html
    http://weblogs.java.net/blog/campbel...tricker_2.html

    Sinon celui de Romain Guy (Gfx sur ce forum) que est un autre spéciliste du dessin en Java2D:

    http://www.curious-creature.org/category/swing/

  3. #3
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    Bon j'ai corrigé quelques peu ma classe et ca marche mieux, le texte est plus joli.


    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
     
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    import javax.swing.JTextField;
     
    public class CustomizedJTextField extends JTextField {
    	private Color topColor = new Color(255, 0, 0);
    	private Color bottomColor = new Color(64, 0, 0);
    	private Color shadowColor = Color.black;
    	private Color textColor = new Color(255, 255, 255);
     
    	public CustomizedJTextField() {
    		super();
    		this.setLayout(null);
    		this.setOpaque(false);
    		this.setBorder(null);
     
    		this.setForeground(textColor);
    	}
     
    	public void paintComponent(Graphics g) {
    		Graphics2D graphics2d = (Graphics2D) g;
     
    		/** ombre */
    		//graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f));
    		graphics2d.setColor(shadowColor);
    		graphics2d.fillRoundRect(0, 0, this.getWidth(), this.getHeight(), 10, 10);
     
    		/** le fond de l'objet avec un gradient + bords arrondis */
    		//graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.9f));
    		GradientPaint gradientpaint = new GradientPaint(this.getHeight() / 2, 0.0F, topColor, this.getHeight() / 2, this.getHeight(), bottomColor);		
    		graphics2d.setPaint(gradientpaint);
    		graphics2d.fillRoundRect(0, 0, this.getWidth()-1, this.getHeight()-2, 10, 10);
     
    		/** on affiche le reste normalement */
    		//graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1));
    		super.paintComponent(graphics2d);
    	}
    }

    EDIT: Les AlphaComposites ne sont pas nécessaires!

    J'ai maté un peu les liens. C'est très intéressant mais ca m'aide pas beaucoup. Je vais googletisé encore un peu.

  4. #4
    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
    AlphaComposite marche très bien mais on ne peut pas vraiment t'aider là. C'est un problème de design dans ton cas. Et comme moi il ne te reste qu'à passer beaucoup de temps à trouver les bonnes couleurs et les bons effets pour avoir de beaux résultats ;-)

Discussions similaires

  1. Réponses: 14
    Dernier message: 07/05/2011, 08h08
  2. [Documentation]Réparer sa voiture soi même
    Par Janitrix dans le forum La taverne du Club : Humour et divers
    Réponses: 12
    Dernier message: 25/08/2007, 23h33
  3. [XP Pro SP]Connexion bureau à distance sur soi-même
    Par AdHoc dans le forum Windows XP
    Réponses: 2
    Dernier message: 05/02/2007, 17h24
  4. une association vers soi-même ?
    Par steve_toulouse dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/10/2006, 12h05

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