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 :

Modifier un separator dans un menu


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut Modifier un separator dans un menu
    Salut tous !

    J'ai un menuBar sur ma frame (j'utilise NetBeans), avec des menus et des menuItems.
    Pour modifier la taille de la police, j'utilise une moulinette et tout marche bien
    jusqu'à ce que je décide de poser un JSeparator entre deux menuItems :
    le code part en erreur avec nullPointerException au moment du setFont sur le séparateur...

    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
     
     int fStyle = 0, fSize = 11;
       String fName = "";
      Component compo = null, compo2 = null
     
     
    for (a = 0; a <= jMenuBar1.getComponentCount()-1; a++) {
          try {
               compo = jMenuBar1.getComponent(a);                   // les menus
               fName = compo.getFont().getFontName();
               fStyle = compo.getFont().getStyle();                
               fSize = USINE.taillePolice;
               compo.setFont(new Font(fName,fStyle,fSize))            
               if (compo.getClass() == JMenu.class) {            // les menuItems 
                    for (b = 0; b <= ((JMenu)compo).getItemCount()-1; b++) {
                          compo2 = ((JMenu)compo).getItem(b);                        
                          fName = compo2.getFont().getFontName();
                          fStyle = compo2.getFont().getStyle();                
                          fSize = USINE.taillePolice;                 // la taille choisie 
                          compo2.setFont(new Font(fName,fStyle,fSize));                                         
                         }
                    }
            }
            catch (Exception ex) {              
                JOptionPane.showMessageDialog(null, " erreur "+ex);     
            }
    }
    J'ai essayé ceci avec l'idée de ne pas appliquer le code sur le séparateur, sans succès (ne se déclenche jamais).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if (compo2.getClass() == JSeparator.class) {
                             JOptionPane.showMessageDialog(null, " separ ");
          }
    Comment faire ?
    merci à toute réponse...

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Autant y a des erreurs difficile à débuguer, autant la faute du pointeur null est facile. Tu parles d'un objet qui n'existe pas !
    Sur la ligne que tu désignes, il y a 4 objets.
    Alors ??? Lequel des 4 est à null ?

  3. #3
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Merci pour la réponse !

    Alors ??? Lequel des 4 est à null ?
    Tous les cinq, mon général !
    c'est carrément compo2 qui est null, parce-que je le transtype par JMenu, et que JSeparator n'est pas un menuItem...
    (si j'ai bien compris.)

    Je passe par-dessus comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
       compo2 = ((JMenu)compo).getItem(b);
               if (compo2 != null) {
                          fName = compo2.getFont().getFontName();
                          fStyle = compo2.getFont().getStyle();                
                          fSize = USINE.taillePolice;
                          compo2.setFont(new Font(fName,fStyle,fSize));
               }
      }
    Ce n'est pas l'idéal d'ignorer ce qui me gêne,
    ... une idée pour faire mieux ?
    merci.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Je déteste le transtypage. A quoi te sert-il ?

    JMenu
    int getItemCount()
    Returns the number of items on the menu, including separators.

  5. #5
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Je déteste le transtypage. A quoi te sert-il ?
    Nécessaire parce-que compo et compo2 sont des JComponent...
    ce qui est stupide, effectivement (!)
    J'ai donc opté pour les variables JMenu unMenu et JMenuItem unMenuItem, avec getItemCount et getItem(b).

    Seul ennui, ça plante toujours sur le separator : quand arrive son tour dans la moulinette unMenuItem est null.
    Je crois que c'est parce-que JSeparator n'est pas un JMenuItem, bien qu'il soit présent dans le ItemCount.

    Enfin bon, ça marche si je teste le != null
    bizarre, hein ? quelque chose m'échappe ?

    le nouveau 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
     
    JMenu unMenu;
    JMenuItem unMenuItem;
     
     
     for (a = 0; a <= jMenuBar1.getMenuCount()-1; a++) {
              try {
                    unMenu = jMenuBar1.getMenu(a);                 // les menus                 
                    fName = unMenu.getFont().getFontName();
                    fStyle = unMenu.getFont().getStyle();                
                    fSize = USINE.taillePolice;
                    unMenu.setFont(new Font(fName,fStyle,fSize));
                    for (b = 0; b <= unMenu.getItemCount()-1; b++) { // les menuItems
                           unMenuItem = unMenu.getItem(b);
                           if (unMenuItem != null) { // est null sur le JSeparator
                                  fName = unMenuItem.getFont().getFontName();
                                  fStyle = unMenuItem.getFont().getStyle();                
                                  fSize = USINE.taillePolice;
                                  unMenuItem.setFont(new Font(fName,fStyle,fSize));
                            }
                        }
                }
                catch (Exception ex) {
                    .. code
               }
      }

Discussions similaires

  1. Modifier un separator dans un menu (bis)
    Par voyager75 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 26/09/2011, 18h30
  2. Réponses: 3
    Dernier message: 25/03/2010, 13h13
  3. [Joomla!] Modifier un lien dans le menu d'admin
    Par django29 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/03/2008, 10h01
  4. Modifier un noeud dans un menu
    Par cathar_rhythm dans le forum Windows
    Réponses: 0
    Dernier message: 20/02/2008, 11h30
  5. Réponses: 11
    Dernier message: 28/02/2007, 12h18

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