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

Composants Java Discussion :

Customiser JButton MouseOver


Sujet :

Composants Java

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Points : 200
    Points
    200
    Par défaut Customiser JButton MouseOver
    Bonjour,

    Je cherche a customiser mes JButton pour un projet. j'aimerai que lors d'un mouseover, une ligne rouge apparaisse en bas du bouton.
    En gros :
    Normal
    Nom : normal.PNG
Affichages : 94
Taille : 511 octets

    MouseOver
    Nom : over.png
Affichages : 112
Taille : 419 octets

    J'ai réussi a mettre mon bouton dans la bonne couleur, mais je ne trouve pas de code style setBorder lié au bottom.

    Merci pour votre aide

    Yasen77

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord, un JButton a un rendu géré par le look and feel : quitte à le détourner, autant faire ça avec un JLabel. Mais si on veut faire ça avec un JButton, on peut faire :

    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
    public class Demo {
     
       public static void main(String[] args) {
     
           JFrame frame = new JFrame("Démo");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
           frame.getContentPane().setLayout(new GridBagLayout());
           frame.add(createJButton());
     
           frame.setSize(600, 300);
           frame.setLocationRelativeTo(null);
           frame.setVisible(true);
     
       }
     
       private static Component createJButton() {
           final JButton button = new JButton("Fermer");
           button.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.BLACK));
           button.setBackground(Color.BLACK);
           button.setForeground(Color.WHITE);
           button.addMouseListener(new MouseAdapter() {
     
              @Override
              public void mouseEntered(MouseEvent e) {
                  button.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.RED));
              }
     
              @Override
              public void mouseExited(MouseEvent e) {
                  button.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.BLACK));
              }
     
          });
          return button;
      }
     
    }
    Mais ça a un défaut : il n'y a plus de marges pour le bouton. On peut utiliser des dimensions fixes dans layout pour y palier mais ce n'est jamais une bonne idée de faire des interfaces figées. Il n'y a pas de border réalisant ce que tu veux faire, mais on peut faire son propre border.

    Par exemple :

    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
    public class ButtonBorder implements Border {
     
    	private final int margins;
    	private final Color color;
    	private final int thickness;
    	private boolean active;
     
    	public ButtonBorder(Color color, int margins, int thickness) {
    		Objects.requireNonNull(color);
    		this.margins=Math.max(margins,0);
    		this.color=color;
    		this.thickness=Math.min(Math.max(thickness,0),this.margins);
    	}
     
     
    	protected void setActive(boolean active) {
    		this.active=active;
    	}
     
    	@Override
    	public void paintBorder(Component c, Graphics g, int x, int y, int width,
    			int height) {
    		if( active ) {
    			g.setColor(color);
    			g.fillRect(x, y+height-thickness, width, thickness);
    		}
    	}
     
    	@Override
    	public Insets getBorderInsets(Component c) {
    		return new Insets(margins, margins, margins, margins);
    	}
     
    	@Override
    	public boolean isBorderOpaque() {
    		return false;
    	}
     
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		frame.getContentPane().setLayout(new GridBagLayout());
    		frame.add(createJButton());
     
    		frame.setSize(600, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static Component createJButton() {
    		final JButton button = new JButton("Fermer");
    		final ButtonBorder border = new ButtonBorder(Color.RED, 5, 2);
     
    		button.setBorder(border);
    		button.setBackground(Color.BLACK);
    		button.setForeground(Color.WHITE);
    		button.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseEntered(MouseEvent e) {
    				border.setActive(true);
    				button.repaint();
    			}
     
    			@Override
    			public void mouseExited(MouseEvent e) {
    				border.setActive(false);
    				button.repaint();
    			}
    		});
    		return button;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 194
    Points : 200
    Points
    200
    Par défaut
    Bonjour joel.drigo,

    Un grand merci pour ton aide, cela fonctionne à merveille.

    Yasen77

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    En relisant mon code, je vois qu'il y un petit bogue dans paintBorder (si tu veux pouvoir changer la couleur de la ligne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void paintBorder(Component c, Graphics g, int x, int y, int width,
    			int height) {
    		if( active ) {
    			g.setColor(color);
    			g.fillRect(x, y+height-thickness, width, thickness);
    		}
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. [Swing] Customisation JButton
    Par NeoKript dans le forum Composants
    Réponses: 3
    Dernier message: 22/01/2011, 20h25
  2. JButton customisé avec dégradé : PB mouseover
    Par nicolas.pied dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 12h15
  3. [JButton] ActionListenner, ActionPerformed
    Par ArchFolken dans le forum Composants
    Réponses: 6
    Dernier message: 04/05/2004, 10h41
  4. [debutant] ajouter ImageIcon dans un Jbutton
    Par agugu dans le forum Composants
    Réponses: 4
    Dernier message: 25/04/2004, 22h40
  5. Comment redimensionner un jbutton ?
    Par Ares dans le forum JBuilder
    Réponses: 13
    Dernier message: 29/09/2003, 16h42

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