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 :

Redessiner la classe JMenuItem : petit problème graphique


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut Redessiner la classe JMenuItem : petit problème graphique
    Bonjour,

    Afin de mieux intégrer une barre de menu dans mon application, j'ai décidé d'étendre les classes JMenuBar et JMenuItem afin de les redessiner, et que leur rendu graphique soit plus proche du thème graphique de mon programme.

    Je n'ai aucun problème avec JMenuBar, le rendu est bon et j'ai ce que je veux.

    Le problème se pose avec JMenuItem, qui est assez récalcitrant

    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
    27
    28
    29
    30
    31
    protected void paintComponent(Graphics g) {				
     
    		GradientPaint paint = null;
     
    		if(isArmed()) {
    			paint = new GradientPaint(0.0f, 0.0f,
    		                new Color(189, 189, 209),
    		                0.0f, getHeight(),
    		                new Color(102, 102, 102));
    		}else {
    			paint = new GradientPaint(0.0f, 0.0f,
    		                new Color(249, 249, 249),
    		                0.0f, getHeight(),
    		                new Color(202, 202, 202));
    		}
     
    		Graphics2D g2 = (Graphics2D) g;
    		g2.setPaint(paint);
    		g2.fillRect(0, 0, getWidth(), getHeight());		
     
    		if(isArmed()) {
    			g2.setColor(Color.white);
    		}else {
    			g2.setColor(textColor);
    		}
     
    		g2.setFont(textFont);
     
    		FontMetrics fm = g2.getFontMetrics();		
    		g2.drawString(getText(), (getWidth() - fm.stringWidth(getText())) / 2, 12);
    	}
    Résultat dans pièce jointe. C'est bien ce que je veux, mais j'ai envie de virer les bords blancs. Donc, j'ai essayé setBorderPainted(false), setBorder(null) et même d'étendre la méthode paintBorder(Graphics g) et de la laisser vide, mais à chaque fois, le même résultat (voir deuxième pièce jointe).

    Comme vous pouvez le voir, la hauteur du bord du bas est réduite, mais c'est tout, alors que cela aurait du disparaitre je pense.

    Aurais-je loupé quelque chose ?


  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    cela vient peut-être du layout du JPopupMenu associé au JMenu ? Je verrais bien un GridLayout avec un vertical gap.

    Pour changer des couleurs dans l'application, il est aussi possible de définir un nouveau thème pour le MetalLookAndFeel. Je ne l'ai pas utilisé, mais c'est fait pour. Ca permet par exemple de changer le background de beaucoup de composants (JMenuBar, JMenu, JPopupMenu, JMenuItem, etc) en surchargeant une seule méthode (MetalTheme#getMenuBackground()).
    L'inconvénient est que la documentation de ces classes est assez limitée, donc à la moindre hésitation sur une couleur, il faut tester.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Effectivement, l'idée du PopupMenu est tout à fait logique. Je vais voir ça.

    Merci

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

Discussions similaires

  1. petit problème de classe
    Par vmfa-2 sven dans le forum C++
    Réponses: 19
    Dernier message: 30/06/2008, 18h16
  2. Java class + Java Bean d'interface = petit problème
    Par Nyphel dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/01/2007, 14h52
  3. Réponses: 4
    Dernier message: 15/10/2006, 18h05
  4. [VB.NET]petit problème avec la classe string !!
    Par zouhib dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/06/2006, 11h58

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