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 :

personnalisation affichage JMenuItm


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut personnalisation affichage JMenuItm
    Pour m'amuser j'ai essayé de redessiner l'intérieur de mon menu. Pour cela, j'ai fais appel à la fonction paintComponent() et j'ai intégré un dégradé. Le problème est que mon texte (intitulé des boutons) est caché par ce dégradé. Comment le faire apparaitre au premier plan ???

    voici mon code :
    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
        private class JMenuItemVault extends JMenuItem {
            // utilisé pour les JMenu
            private JMenuItemVault(String text, VaultController controller, ImageIcon icon, JMenu menu) {
                super();
                setText(text);
                setIcon(icon);
                setFont(new Font(null, Font.PLAIN, 12));
                addActionListener(controller);
                menu.add(this);
            }
            // utilisé pour les JPopupMenu
            private JMenuItemVault(String text, VaultController controller, ImageIcon icon, JPopupMenu menu) {
                super();
                setText(text);
                setIcon(icon);
                setFont(new Font(null, Font.PLAIN, 12));
                addActionListener(controller);
                menu.add(this);
            }
            public void paintComponent(final Graphics g) {
                super.paintComponent(g);
                final Graphics2D g2 = (Graphics2D) g;
                g2.setPaint(new GradientPaint(0, 0, Color.white, getWidth(), getHeight(), (new Color(235,243,255)),false));
                g2.fillRect(0, 0, getWidth(), getHeight());
            }
        }

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    tu as juste inversé l'ordre de dessin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void paintComponent(final Graphics g) {
                super.paintComponent(g);
                final Graphics2D g2 = (Graphics2D) g;
                g2.setPaint(new GradientPaint(0, 0, Color.white, getWidth(), getHeight(), (new Color(235,243,255)),false));
                g2.fillRect(0, 0, getWidth(), getHeight());
            }
    tu dois mettre la ligne apres, sinon le degradé recouvre tout le reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void paintComponent(final Graphics g) {           
                final Graphics2D g2 = (Graphics2D) g;
                g2.setPaint(new GradientPaint(0, 0, Color.white, getWidth(), getHeight(), (new Color(235,243,255)),false));
                g2.fillRect(0, 0, getWidth(), getHeight());
                super.paintComponent(g);
            }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    Je suis navré mais en mettant le super.paintComponent(g) à la fin, je ne vois plus le dégradé (mais le texte est visible !!!)

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il est préférable d'utiliser un UI plutôt que de redéfinir paintComponent()...

    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
    class VaultMenuItemUI extends BasicMenuItemUI {
     
    	@Override
    	protected void paintBackground(Graphics g, JMenuItem menuItem, Color bgColor) {
     
    		ButtonModel model = menuItem.getModel();
            int menuWidth = menuItem.getWidth();
            int menuHeight = menuItem.getHeight();
     
            if (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())) {
            	// Background lorsque le menu est sélectionné :
            	Color oldColor = g.getColor();
            	g.setColor(bgColor);
                g.fillRect(0,0, menuWidth, menuHeight);
                g.setColor(oldColor);
            } else if (menuItem.isOpaque()) {
            	// Background normal :
            	Graphics2D g2 = (Graphics2D) g;
                Paint oldPaint = g2.getPaint();
            	g2.setPaint(new GradientPaint(0, 0, Color.white, menuWidth, menuHeight, (new Color(235,243,255)),false));
            	g2.fillRect(0, 0, menuWidth, menuHeight);
                g2.setPaint(oldPaint);
            }
     
    	}
    }
    Il suffit ensuite d'utiliser cet UI pour tes JMenuItem :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setUI(new VaultMenuItemUI());
    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    merci, ça marche nickel

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

Discussions similaires

  1. [AC-2010] Personnalisation Affichage Ruban
    Par Nelmech dans le forum IHM
    Réponses: 3
    Dernier message: 21/08/2012, 19h25
  2. Réponses: 2
    Dernier message: 16/04/2007, 17h59
  3. [PHP-JS] Personnalisation des options d'affichage
    Par cirtey dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2006, 17h35
  4. Réponses: 2
    Dernier message: 04/12/2005, 13h26
  5. [Struts]personnaliser l'affichage avec des tags
    Par adrien.nicolet dans le forum Struts 1
    Réponses: 1
    Dernier message: 30/10/2005, 19h32

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