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 :

mettre image sur la barre de menu


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut mettre image sur la barre de menu
    salut tout le monde
    je veux mettre une image en arriere plan sur le JMenuBar et sur jmenu
    voila le 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
    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
     
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    public class test extends JComponent {
     BufferedImage im;
    static   JMenuBar jMenuBar1 = new JMenuBar();
      JMenu jMenu1 = new JMenu();
      JMenu jMenu2 = new JMenu();
     JMenuItem jMenuItem2 = new JMenuItem();
      JMenuItem jMenuItem1 = new JMenuItem();
      JMenuItem jMenuItem3 = new JMenuItem();
     
       test() {
           try {
               this.im = ImageIO.read(new File("C:\\Documents and Settings\\Administrateur\\Bureau\\8.jpg"));
           } catch (IOException e1) {
     
               e1.printStackTrace();
           }
     
           try {
     
     
               jbInit();
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
     
       public static void main(String[] args) {
           test fenetre = new test();
           JFrame f = new JFrame("test");
           f.setJMenuBar(jMenuBar1);
           f.setContentPane(fenetre);
           f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
           f.setSize(600,400);
           f.setLocationRelativeTo(null);
           f.setVisible(true);
       }
     
       private void jbInit() throws Exception {
    this.setLayout(null);
     
    jMenu1.setText("AA");
    jMenu2.setText("BB");
    jMenuItem2.setText("a");
    jMenuItem1.setText("b");
    jMenuItem3.setText("c");
    jMenuBar1.add(jMenu1);
    jMenuBar1.add(jMenu2);
    jMenu1.add(jMenuItem1);
    jMenu1.add(jMenuItem2);
    jMenu1.addSeparator();
    jMenu1.add(jMenuItem3);
    this.repaint();
     
     
       }
     
       public void paint(Graphics arg0) {
           arg0.drawImage(im, 0, 0, this);
           super.paint(arg0);
        }
    }
    j'espere que quelqu'un pourrais m'aider merci

  2. #2
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Citation Envoyé par minooo Voir le message
    salut tout le monde
    je veux mettre une image en arriere plan sur le JMenuBar et sur jmenu
    voila le code

    j'espere que quelqu'un pourrais m'aider merci
    Et qu'est ce que tu attends de nous exactement?qu'est ce qui ne fonctionne pas ?
    En plus il me semble avoir deja vu le meme sujet abordé par toi dans un autre post

  3. #3
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    salut, je t'avais déjà donné des pistes :
    Si tu ne comprenais pas il te suffisait de le dire et je t'aurai sans problème aidé.

    Voici ce que tu souhaite réaliser je crois :
    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
     
    import javax.swing.*;
    import java.awt.*;
     
     
    public class test extends JFrame { // Etends directement JFrame se sera plus facile!
     
        /* En langage objet les variable de classes doivent être
         * généralement déclarées private*/
     
        //"08.jpg" si tu met l'image avec ton code source, sinon adresse complete
        private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("08.jpg"); //!!! cf ligne 56
        private JMenu jMenu1 = new JMenu();
        private JMenu jMenu2 = new JMenu();
        private JMenuItem jMenuItem2 = new JMenuItem();
        private JMenuItem jMenuItem1 = new JMenuItem();
        private JMenuItem jMenuItem3 = new JMenuItem();
     
        /* ... et les méthodes public ( constructeurs compris ça fais mieux lol )
         * En ayant étendue JFrame tu peux construire ta frame ici dans le constructeur
         * tu n'aura plus qu'à appeler le constructeur dans le main()
         */
        public test() {
           setTitle("test");
           setJMenuBar(jMenuBar1);
           setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
           setSize(600,400);
           setLocationRelativeTo(null);
           setVisible(true);
           jbInit();
       }
     
       public static void main(String[] args) {
           test fenetre = new test();
           // même mieux si tu n'a pas besoin de référence à ta JFrame
           // tu met directement new test();
       }
     
       private void jbInit() {
            this.setLayout(null);
     
            jMenu1.setText("AA");
            jMenu2.setText("BB");
            jMenuItem2.setText("a");
            jMenuItem1.setText("b");
            jMenuItem3.setText("c");
            jMenuBar1.add(jMenu1);
            jMenuBar1.add(jMenu2);
            jMenu1.add(jMenuItem1);
            jMenu1.add(jMenuItem2);
            jMenu1.addSeparator();
            jMenu1.add(jMenuItem3);
            repaint();
       }
       /*tu crées une classe, ici interne qui redéfinit la méthode paintComponent() de JMenuBar
        * Crée autant de class interne que tu veux en étendant les composants pour lesquels tu 
        * veux une image en arrière plan
        */
       class JMenuBarBackground extends JMenuBar{
     
           private Image img;
     
           /*avec cette méthode tu peux changer d'image quand tu le souhaite*/
           public JMenuBarBackground(String imageAdresse) {
               img = new javax.swing.ImageIcon(getClass().getResource(imageAdresse)).getImage();
           }
     
     
           @Override // ça montre simplement que tu redéfinie la méthode
           public void paintComponent(Graphics g) {
               if(img == null) return; 
               else g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // ainsi cela occupe tout le composant
     
           }
     
       }
    }
    Voila cela te met une image en arrière plan de ton JMenuBar, il y a d'autre façons de procéder je crois , je te laisse le reste du boulot pour tes JMenu ... faut que ça rentre!

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    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
     
    import javax.swing.*;
    import java.awt.*;
     
    public class test extends JFrame { 
     
        private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("C:\\Documents and Settings\\ra\\Bureau\\8.jpg"); //!!! cf ligne 56
        private JMenu jMenu1 = new JMenu();
        private JMenu jMenu2 = new JMenu();
        private JMenuItem jMenuItem2 = new JMenuItem();
        private JMenuItem jMenuItem1 = new JMenuItem();
        private JMenuItem jMenuItem3 = new JMenuItem();
     
     
        public test() {
           setTitle("test");
           setJMenuBar(jMenuBar1);
           setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
           setSize(600,400);
           setLocationRelativeTo(null);
           setVisible(true);
           jbInit();
       }
     
       public static void main(String[] args) {
           test fenetre = new test();
     
     
       }
     
       private void jbInit() {
            this.setLayout(null);
     
            jMenu1.setText("AA");
            jMenu2.setText("BB");
            jMenuItem2.setText("a");
            jMenuItem1.setText("b");
            jMenuItem3.setText("c");
            jMenuBar1.add(jMenu1);
            jMenuBar1.add(jMenu2);
            jMenu1.add(jMenuItem1);
            jMenu1.add(jMenuItem2);
            jMenu1.addSeparator();
            jMenu1.add(jMenuItem3);
            repaint();
       }
     
       class JMenuBarBackground extends JMenuBar{
     
           private Image img;
     
     
           public JMenuBarBackground(String imageAdresse) {
          img = new javax.swing.ImageIcon(getClass().getResource(imageAdresse)).getImage();
           }
     
     
     
           public void paintComponent(Graphics g) {
               if(img == null) return; 
               else g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // ainsi cela occupe tout le composant
     
           }
     
       }
    }
    le code ne fonctionne pas j'ai des erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    java.lang.NullPointerException
    	at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
    	at mu.test$JMenuBarBackground.<init>(test.java:55)
    	at mu.test.<init>(test.java:8)
    	at mu .test.main(test.java:27)
    Exception in thread "main"

  5. #5
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    L'erreur signifie que le chemin est incorrecte, que l'image n'a pas été trouvé. Met ton image avec ton fichier .class et là ça devrait marcher.

    [EDIT] : ce code ne fonctionne pas a chaque fois j'ai oublié de rajouter une méthode repaint() dans le constructeur!!!

  6. #6
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    Sinon (une connerie de ma part ), j'ai oublié de mettre un repaint() pour redessiner l'image sur la barre au démarrage de l'applie et de plus si tu ne compte pas faire un jar avec ton applie tu peux plus facilement récupérer l'image en faisant ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /*REMPLACE LE CONSTRUCTEUR PRECEDENT PAS CELUI-CI ET ÇA DEVAIT MARCHER !*/
    public JMenuBarBackground(String imageAdresse) {
               img = new javax.swing.ImageIcon(imageAdresse).getImage(); // TU PEUX PLUS SIMPLEMENT RECUPERER TON IMAGE.
               repaint(); // PERMET DE RAFRAICHIR L'IMAGE!!!
           }
    Tu n'es pas obligé de doubler les '\' ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("C:\\Documents and Settings\\ra\\Bureau\\8.jpg"); 
     
    REMPLACE PAR :
        private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("C:\Documents and Settings\ra\Bureau\8.jpg");
    Enfin il vos mieux initialiser la barre avant que la JFrame soit visible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /*A REMPLACER PAR CE CODE*/
    public test() {
           setTitle("test");
           setJMenuBar(jMenuBar1);
           jbInit(); //ici on initialise la barre correctement, juste après quelle est soit "accroché" à la frame
           setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
           setSize(600,400);
           setLocationRelativeTo(null);
           setVisible(true);
           //jbInit(); // ici on initialisait la barre alors que la fenetre était déjà visible ce qui pouvait causer des problèmes (barre non visible!!!)
       }
    Excuse moi pour toutes ces erreurs d'inattentions je fais ça tard le soir la tête dans les nuages Le code précédent marchait, mais pas parfaitement comme tu peux voir avec toute les corrections que j'ai apportés.
    Dit moi si tu as d'autres problèmes avec se code.

  7. #7
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    Je teste tout les code que je t'ai donné, il marche tous plus ou moins bien mais sans erreur ton image ne doit pas être à l'endroit indiqué par ton adresse : "C:\\Documents and Settings\\ra\\Bureau\\8.jpg" ou le format n'est pas le bon, vérifie !!!

    PS: Si tu mets l'image avec le code sources (.class et .java) tu remplaces tout simplement cette ligne ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("08.jpg");

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    Citation Envoyé par kayzra Voir le message
    Je teste tout les code que je t'ai donné, il marche tous plus ou moins bien mais sans erreur ton image ne doit pas être à l'endroit indiqué par ton adresse : "C:\\Documents and Settings\\ra\\Bureau\\8.jpg" ou le format n'est pas le bon, vérifie !!!

    PS: Si tu mets l'image avec le code sources (.class et .java) tu remplaces tout simplement cette ligne ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("08.jpg");

    tu es sur que le code fonctionne !

    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
     
     
    package mustapha;
     
    import javax.swing.*;
    import java.awt.*;
     
    public class nettoyage extends JFrame {
     
      private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("C:\\Documents and Settings\\ ARI\\Bureau\\1.jpg"); 
     
       private JMenu jMenu1 = new JMenu();
       private JMenu jMenu2 = new JMenu();
       private JMenuItem jMenuItem2 = new JMenuItem();
       private JMenuItem jMenuItem1 = new JMenuItem();
       private JMenuItem jMenuItem3 = new JMenuItem();
     
     
       public nettoyage() {
           setTitle("test");
           setJMenuBar(jMenuBar1);
           jbInit(); //ici on initialise la barre correctement, juste après quelle est soit "accroché" à la frame
           setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
           setSize(600,400);
           setLocationRelativeTo(null);
           setVisible(true);
           //jbInit(); // ici on initialisait la barre alors que la fenetre était déjà visible ce qui pouvait causer des problèmes (barre non visible!!!)
       }
     
     
     
      public static void main(String[] args) {
         nettoyage fenetre = new  nettoyage();
     
     
      }
     
      private void jbInit() {
           this.setLayout(null);
     
           jMenu1.setText("AA");
           jMenu2.setText("BB");
           jMenuItem2.setText("a");
           jMenuItem1.setText("b");
           jMenuItem3.setText("c");
           jMenuBar1.add(jMenu1);
           jMenuBar1.add(jMenu2);
           jMenu1.add(jMenuItem1);
           jMenu1.add(jMenuItem2);
           jMenu1.addSeparator();
           jMenu1.add(jMenuItem3);
           repaint();
      }
     
      class JMenuBarBackground extends JMenuBar{
     
          private Image img;
     
     
          public JMenuBarBackground(String imageAdresse) {
               img = new javax.swing.ImageIcon(imageAdresse).getImage(); // TU PEUX PLUS SIMPLEMENT RECUPERER TON IMAGE.
               repaint(); // PERMET DE RAFRAICHIR L'IMAGE!!!
           }
     
     
     
     
          public void paintComponent(Graphics g) {
              if(img == null) return;
              else g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // ainsi cela occupe tout le composant
     
          }
     
      }
    }
    voila les erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    java.lang.Error: Do not use mu.nettoyage.setLayout() use mu.nettoyage.getContentPane().setLayout() instead
    	at javax.swing.JFrame.createRootPaneException(JFrame.java:465)
    	at javax.swing.JFrame.setLayout(JFrame.java:531)
    	at mu.nettoyage.jbInit(nettoyage.java:37)
    	at mu.nettoyage.<init>(nettoyage.java:20)
    	at mu.nettoyage.main(nettoyage.java:31)
    Exception in thread "main"

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

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

    Le code que je t'avais donné marchait bien, il te suffisait de mettre l'image dans le même répertoire (package) que ta classe

    Sinon ton code ne fonctionne pas (ou du moins il affiche l'image à l'intérieur de ta fenêtre) car le paint que tu surcharge est celui de test qui hérite de JComponent. Cette façon de faire est assez déconcertante, mais bon ... Or tu passe ce JComponent au contentPane de ta JFrame donc l'image s'affiche dans ta JFrame.

    Toi tu veux que l'image s'affiche dans ton JMenuBar, il faut donc surcharger le paint du JMenuBar.

    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
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    public class test {
    	static BufferedImage im;
    	static JMenuBar jMenuBar1;
    	static JMenu jMenu1 = new JMenu();
    	static JMenu jMenu2 = new JMenu();
    	static JMenuItem jMenuItem2 = new JMenuItem();
    	static JMenuItem jMenuItem1 = new JMenuItem();
    	static JMenuItem jMenuItem3 = new JMenuItem();
     
     
    	public static void main(String[] args) {
    		try {
    			im = ImageIO.read(new File("C:\\Documents and Settings\\ra\\Bureau\\8.jpg"));
    		} 
    		catch (IOException e1) {
    			e1.printStackTrace();
    		}
     
    		jMenuBar1 = new JMenuBar() {
    			public void paintComponent(Graphics arg0) {
    				super.paintComponent(arg0);
    				arg0.drawImage(im, 0, 0, null);
     
    			}
    		};
    		initMenu();
    		JFrame f = new JFrame("test");
    		f.setJMenuBar(jMenuBar1);
    		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		f.setSize(600, 400);
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
    	private static void initMenu() {
    		jMenu1.setText("AA");
    		jMenu2.setText("BB");
    		jMenuItem2.setText("a");
    		jMenuItem1.setText("b");
    		jMenuItem3.setText("c");
    		jMenuBar1.add(jMenu1);
    		jMenuBar1.add(jMenu2);
    		jMenu1.add(jMenuItem1);
    		jMenu1.add(jMenuItem2);
    		jMenu1.addSeparator();
    		jMenu1.add(jMenuItem3);
    	}
     
     
    }
    Tu as la capture écran en pièce jointe qui te montre que ça marche.

    Si tu veux mettre une image sur le popup contenant les items du menu c'est plus difficile.
    Images attachées Images attachées  

  10. #10
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    Voici la preuve que ça marche, je sais pas ce que tu fais, mais tu dois planter quelque par !!!

    En pieces jointe à dézipper , tu lance le jar et dit moi...

    Pour corriger l'erreur remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //CA :
    this.setLayout(null);
    //PAR :
    this.getContentPane().setLayout(NULL);
    c'est comme le "Port Salut", c'est écrit dessus :" Do not use mu.nettoyage.setLayout() use mu.nettoyage.getContentPane().setLayout() instead "
    Fichiers attachés Fichiers attachés

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    bonsoir


    je vous montre le résultat de ce code qui n'affiche pas image comme arriere plant sur toute la barre comme votre 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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
     
    import javax.swing.*;
    import java.awt.*;
     
    public class nettoyage extends JFrame {
     
      private JMenuBarBackground jMenuBar1 = new JMenuBarBackground("C:\\Documents and Settings\\BE \\Bureau\\1.jpg");
     
       private JMenu jMenu1 = new JMenu();
       private JMenu jMenu2 = new JMenu();
       private JMenuItem jMenuItem2 = new JMenuItem();
       private JMenuItem jMenuItem1 = new JMenuItem();
       private JMenuItem jMenuItem3 = new JMenuItem();
     
     
       public nettoyage() {
           setTitle("test");
           setJMenuBar(jMenuBar1);
           jbInit(); //ici on initialise la barre correctement, juste après quelle est soit "accroché" à la frame
           setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
           setSize(600,400);
           setLocationRelativeTo(null);
           setVisible(true);
           //jbInit(); // ici on initialisait la barre alors que la fenetre était déjà visible ce qui pouvait causer des problèmes (barre non visible!!!)
       }
     
     
     
      public static void main(String[] args) {
         nettoyage fenetre = new  nettoyage();
     
     
      }
     
      private void jbInit() {
          this.getContentPane().setLayout(null);
     
           jMenu1.setText("AA");
           jMenu2.setText("BB");
           jMenuItem2.setText("a");
           jMenuItem1.setText("b");
           jMenuItem3.setText("c");
           jMenuBar1.add(jMenu1);
           jMenuBar1.add(jMenu2);
           jMenu1.add(jMenuItem1);
           jMenu1.add(jMenuItem2);
           jMenu1.addSeparator();
           jMenu1.add(jMenuItem3);
           repaint();
      }
     
      class JMenuBarBackground extends JMenuBar{
     
          private Image img;
     
     
          public JMenuBarBackground(String imageAdresse) {
               img = new javax.swing.ImageIcon(imageAdresse).getImage(); // TU PEUX PLUS SIMPLEMENT RECUPERER TON IMAGE.
               repaint(); // PERMET DE RAFRAICHIR L'IMAGE!!!
           }
     
     
     
     
          public void paintComponent(Graphics g) {
              if(img == null) return;
              else g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // ainsi cela occupe tout le composant
     
          }
     
      }
      class JMenua  extends JMenuBar{
     
         private Image img;
     
     
         public JMenua (String imageAdresse) {
              img = new javax.swing.ImageIcon(imageAdresse).getImage(); // TU PEUX PLUS SIMPLEMENT RECUPERER TON IMAGE.
              repaint(); // PERMET DE RAFRAICHIR L'IMAGE!!!
          }
     
     
     
     
         public void paintComponent(Graphics g) {
             if(img == null) return;
             else g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // ainsi cela occupe tout le composant
     
         }
     
     }
     
     
     
     
    }
    mais pourquoi !

  12. #12
    Membre confirmé Avatar de kayzra
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Par défaut
    Chez moi (sous linux) ça marche très bien, tu peux rajouter ces lignes dans la méthode jbInit() juste avant le repaint(); ces méthode mettent sur false tout ce qui pourrait rendre jMenu1 et 2 selectionnés comme le montre ton screenshoot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    jMenu1.setArmed(false);jMenu1.setOpaque(false);jMenu1.setContentAreaFilled(false);jMenu1.setSelected(false);
     jMenu2.setArmed(false);jMenu2.setOpaque(false);jMenu2.setContentAreaFilled(false);jMenu2.setSelected(false);
    Après si ça ne marche pas je vois pas

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Par défaut
    merci kayzra

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

Discussions similaires

  1. [AC-2007] Afficher le nom de ma BDD sur la barre de menu
    Par Bonero dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/07/2012, 22h53
  2. [XL-2003] Image dans une barre de menu.
    Par khame1 dans le forum Excel
    Réponses: 0
    Dernier message: 02/09/2011, 12h15
  3. Ajouter une action sur une barre de menu
    Par alex2746 dans le forum Qt
    Réponses: 2
    Dernier message: 01/04/2010, 15h39
  4. [XHTML 1.1] Petite image sur la barre de titre
    Par midotek dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/01/2009, 23h15
  5. Réponses: 2
    Dernier message: 08/06/2006, 11h09

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