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

Agents de placement/Fenêtres Java Discussion :

Supprimer le rollover JButton


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    RhO
    RhO est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut Supprimer le rollover JButton
    Bonjour,
    J'ai un soucis avec l'extends d'un JButton.
    Dans le paintComponent, je dessine une zone semi transparente et au moment ou je passe la souris au dessus du bouton, il y a une sorte de fond blanc qui s'ajoute sous le JButton ce qui l'empêche d'être transparent.

    Quelqu'un saurait d'ou vient le problème ?

    merci

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Post ton code (dans un cas simple d'utilisation, et que l'on puisse tester), parce que là, c'est difficile de te répondre...

  3. #3
    RhO
    RhO est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    j'ai regler le probleme avec mon JButton.
    Ce que j ai fait c'est d' overrider la fonction public void repaint().

    Poster le code c'est pas tres simple,

    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
     
     
    public class JButtonG1 extends JButton{
    	@Override
    	public void repaint() {
    		//super.repaint();
    	}
    	private String titre;  
     
    	public JButtonPage(String titre){
    		super.setText(titre);
    		this.titre=titre;   
    	} 
    	@Override
    	protected void paintComponent(Graphics g) { 
     
        	   g.setColor(new Color(80,80,80,80));   
        	   g.fillRoundRect(0, 0,getWidth(),getHeight(),20,20);
     
        	   g.setColor(new Color(255,255,255));   
        	   g.drawString(titre,8, 12);
     
        	   g.dispose();
    	}
     
    }
    Faire ce que j'ai fait n'est pas forcement super, y a t'il une meilleur solution pour éviter d'avoir le bouton changer de couleur au passage de la souris surtout que la couleur reste ?

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Schinter le repaint n'est pas une bonne idée, non.

    Il suffit de demander que le contenu et la bordure ne soit pas dessiné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setBorderPainted(false);
    setContentAreaFilled(false);
    Cela permet de conserver le dessin du focus.

    Tu n'as plus qu'à dessiner ton rectangle avec ta couleur, puis a appeler le super.paintComponent(g) afin qu'il dessine le texte et le focus par dessus. Pas besoin d'un attribut String le JButton le fait déjà pour toi.

    Du rouge et du jaune donne de l'orange :
    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
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    @SuppressWarnings("serial")
    public class Test extends JFrame {
     
    	private JButtonG1 btn;
     
    	public Test() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		btn = new JButtonG1("test");
    		btn.setForeground(Color.WHITE);
    		btn.setBackground(new Color(255, 0, 0, 128));
     
    		JPanel content = (JPanel) getContentPane();
    		content.setBackground(Color.YELLOW);
    		content.setBorder(BorderFactory.createEmptyBorder(5, 2, 2, 2));
    		content.add(btn);
    	}
     
    	public static void main(String[] args) {
    		Test fenetre = new Test();
    		fenetre.pack();
    		fenetre.setLocationRelativeTo(null);
    		fenetre.setVisible(true);// On la rend visible
    	}
     
    	public class JButtonG1 extends JButton {
     
    		public JButtonG1(String titre) {
    			super.setText(titre);
    			setBorderPainted(false);
    			setContentAreaFilled(false);
    		}
     
    		@Override
    		protected void paintComponent(Graphics g) {
    			Graphics2D g2 = (Graphics2D) g;
    			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    			g2.setColor(getBackground());
    			int h = getHeight();
    			int arc = h / 3;
    			g2.fillRoundRect(0, 0, getWidth(), h, arc, arc);
    			super.paintComponent(g2);
    		}
     
    	}
     
    }

  5. #5
    RhO
    RhO est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    J'ai rajouté a mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setBorderPainted(false);
    setContentAreaFilled(false);
    Mais sa ne marche pas... Par contre ta version a toi marche parfaitement, c'est bien ce que je veut (mise a par le cadre autour de "test" mais ce n'est pas important).
    Je vais tester autrement j'ai du oublier de faire quelque chose après la création du jboutton.

    thxx

  6. #6
    RhO
    RhO est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    Franchement je comprend pas...
    Je n'arrive pas a supprimer le fond blanc qui apparait et qui ne s'enlève sous le JButton pas après le passage de la souris...
    Finalement je vait garder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	@Override
    	public void repaint() {
    		//super.repaint();
    	}
    à moins que sa provoque pas la suite des problèmes ?

Discussions similaires

  1. Supprimer deux Jbutton créés dynamiquement d'un jPanel
    Par phenix1988 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/12/2011, 13h09
  2. JButton dans JTable qui supprime ligne
    Par Tchoupi34 dans le forum Composants
    Réponses: 5
    Dernier message: 14/07/2010, 22h16
  3. Supprimer un JButton
    Par charpe_a dans le forum Composants
    Réponses: 1
    Dernier message: 22/09/2008, 15h58
  4. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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