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 :

Button avec couleur dégradé


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 174
    Par défaut Button avec couleur dégradé
    Bnojour,

    J'aimerai savoir comment faire des Boutons avec une couleur dégradé , comme les boutons sur l'image si dessous.

    Merci d'avance.


  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,

    voici un exemple d'un bouton en dégradé... je ne sais pas si c'est la meilleur façon de faire, mais je te le mets quand même, et plus important, ça marche

    class GradientButton
    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
     
    import javax.swing.JButton;
    import javax.swing.AbstractButton;
    import javax.swing.Timer;
    import javax.swing.plaf.basic.BasicButtonUI;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GradientPaint;
    import java.awt.AlphaComposite;
    import java.awt.RenderingHints;
    import java.awt.Paint;
    import java.awt.Color;
    import java.awt.image.BufferedImage;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class GradientButton extends JButton
    {
    	private Color startClr = null, endClr = null, borderClr = null; 
    	private BufferedImage imgButton = null;
     
    	public GradientButton(String text)
    	{
    		this(text, Color.WHITE, new Color(190, 190, 190), Color.DARK_GRAY);
    	}
    	public GradientButton(String text, Color startClr, Color endClr, Color borderClr)
    	{
    		super(text);
    		setContentAreaFilled(false);
    		this.startClr = startClr;
    		this.endClr = endClr;
    		this.borderClr = borderClr;
    		BasicButtonUI ui = new BasicButtonUI(){
    			protected void paintButtonPressed(Graphics g, AbstractButton b)
    			{
    				Graphics2D g2 = (Graphics2D)g;
    				GradientPaint grad = new GradientPaint(0, 0, new Color(190, 190, 190), 0, b.getHeight(), 
    						Color.WHITE);
    				g2.setPaint(grad);
    				g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f));
    				g2.fillRect(0, 0, b.getWidth(), b.getHeight());
    			}
    		};
    		setUI(ui);
    	}
    	public void setStartColor(Color clr)
    	{
    		startClr = clr;
    	}
    	public void setEndColor(Color clr)
    	{
    		endClr = clr;
    	}
    	public void paintBorder(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D)g;
    		g2.setColor(borderClr);
    		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    		g2.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 10, 10);
    	}
    	public void paintComponent(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D)g;
    		if (imgButton == null)
    		{
    			imgButton = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
    			Graphics2D g2Img = imgButton.createGraphics();
    			g2Img.setClip(g2.getClip());
    			GradientPaint grad = new GradientPaint(0, 0, startClr, 0, getHeight(), endClr);
    			g2Img.setPaint(grad);
    			g2Img.fillRoundRect(0, 0, getWidth(), getHeight(), 10, 10);
    		}		
    		g2.drawImage(imgButton, 0, 0, imgButton.getWidth(), imgButton.getHeight(), null);
    		super.paintComponent(g2);
    	}
    }
    class pour tester
    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
     
    import javax.swing.*;
    import java.awt.*;
     
    public class TestGradientButton
    {
    	public static void main(String[] args)
    	{		
    		JFrame frm = new JFrame();
    		Box bx = Box.createVerticalBox();
    		GradientButton btn1 = new GradientButton("GradientButton1");
    		GradientButton btn2 = new GradientButton("GradientButton2", Color.WHITE, Color.RED, Color.BLACK);
    		GradientButton btn3 = new GradientButton("GradientButton3", Color.WHITE, Color.BLUE, Color.GREEN);
    		//btn.setBounds(35, 50, 120, 30);
    		bx.add(btn1);
    		bx.add(Box.createVerticalStrut(10));
    		bx.add(btn2);
    		bx.add(Box.createVerticalStrut(10));
    		bx.add(btn3);
    		frm.add(bx);
    		frm.setSize(200, 200);
    		frm.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		frm.setVisible(true);
    	}
    }
    tu remarqueras peut être des lignes de code inutiles (des import par exp), j'ai nettoyé un peu, mais j'ai pas beaucoup de temps, alors...

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    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 909
    Billets dans le blog
    54
    Par défaut
    Trois petites remarques :

    - plutot que de coder en dur le gradient, il peut etre interressant de mettre un ComponentListener sur le bouton et de recalculer les limites du gradient en fonction des nouvelles dimensions du bouton quand on recoit un componentResized.

    - A tester mais il n'est peut-etre pas necessaire de creer une image intermediaire. Mais bon si ca se trouve ca aide un peu au niveau performances.
    Dans ce cas preferrer une BufferedImage compatible (getGraphicsConfiguration().createCompatibleImage(...)) plutot qu'une creee au vol.

    - pour arriver a faire la meme chose sans se casser la tete : recupere SwingX et utiliser un JXButton avec un backgroundPainter approprie.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 174
    Par défaut
    Bonjour,

    ça marche ,Je vous remercie beaucoup c'est très gentil.

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

Discussions similaires

  1. [Débutant] Panel avec un dégradé de couleur
    Par sofianeweb dans le forum Windows Forms
    Réponses: 7
    Dernier message: 28/11/2014, 14h23
  2. Texte avec couleur en dégradé
    Par Leparachute dans le forum Mise en forme
    Réponses: 0
    Dernier message: 26/03/2009, 17h01
  3. PopupMenu : afficher un dessin avec couleur personnalisée
    Par MiJack dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/02/2006, 12h54
  4. Réponses: 1
    Dernier message: 06/12/2005, 22h23
  5. [VB.NET] Brush avec couleur définie en RGB
    Par jennings dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/12/2004, 08h41

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