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

 Java Discussion :

JMenuBar & Options pour changer la taille de ma Frame


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut JMenuBar & Options pour changer la taille de ma Frame
    Bonjour, je suis toujours le même débutant qui est posé une ou deux questions auparavant.
    Mon souci est le suivant :
    J'ai un exercice à faire en cours, et j'ai déjà travaillé 2-3 heures sur cet exercice, mais là je suis coincé et n'arrive plus à avancer.

    Voici tout d'avord mon code (Soyez indulgents, cela ne fait que 3 mois que je fais du JAVA et 1 mois que nous touchons au Swing)

    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 java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
     
    public class FenetreVar extends JFrame {
     
    	public FenetreVar(){
    		JPanel p = new JPanel();
    		p.setLayout(new FlowLayout());
    		Contenu contenu = new Contenu(this);
    		p.add(contenu);
    		getContentPane().add(p);
    		this.setSize(300,300);
    		this.setResizable(false);
    		//Petite info pour moi pour pas que j'oublie le this la prochaine fois
    		//this.setSize(300, 300);
    	}	
     
    	class Contenu extends JPanel implements ActionListener{
     
    		public Contenu(FenetreVar maFenetre){
    			JMenuBar jmb = new JMenuBar();
    			JMenu jm = new JMenu();
    			jm.setText("Menu Quitter");
    			jmb.add(jm);
    			JMenuItem jmi = new JMenuItem();
    			jmi.addActionListener(this);
    			jmi.setText("Quitter le programme");
    			jm.add(jmi);
     
    			JMenuBar jmb1 = new JMenuBar();
    			JMenu jm1 = new JMenu();
    			jm1.setText("Taille");
    			jmb1.add(jm1);
    			JMenuItem itemPetite = new JMenuItem("Petite");
    			itemPetite.addActionListener(this);
    			JMenuItem itemMoyenne = new JMenuItem("Moyenne");
    			itemMoyenne.addActionListener(this);
    			JMenuItem itemGrande = new JMenuItem("Grande");
    		    itemGrande.addActionListener(this);
    			jm1.add(itemPetite);
    			jm1.add(itemMoyenne);
    			jm1.add(itemGrande);
     
    			this.add(jmb);
    			this.add(jmb1);
    		}
     
    		public void actionPerformed(ActionEvent e) {
     
    			if (e.getSource().equals("Petite")){
    				this.setSize(150, 150);
    			}else{
    				if (e.getSource().equals("Moyenne")){
    					this.setSize(300, 300);
    				}else{
    					if (e.getSource().equals("Grande")){
    						this.setSize(600, 600);				
    					}
    				}
    			}
    		}
    	}
    }

    Mes blocages se situent dans les points suivants :

    - Comment faire pour placer mes JMenuBar dans une barre en haut à gauche comme sous Windows pour que cela soit plus propre.

    - Pourquoi est ce que je n'arrive pas à agrandir ma fenêtre en cliquant sur taille, petite, moyenne ou grande...

    - Pour le menu quitter je n'y ai pas encore travailler donc laissez tomber pour le moment svp

    Nous n'avons pas travaillé les JMenuBar en cours, et cet exercice était assez difficile dans le sens ou je ne connaissais pas du tout le code à poser pour une JMenuBar... Merci d'avance

  2. #2
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    1. Concernant l'utilisation des menus, le "How to use" de sun est dispo ici.
    2. Pour le problème de redimensionnement de la fenêtre, es-tu sûr que le "this.setSize(...)" s'applique bien à la fenêtre ?

    Une remarque : est-ce bien raisonnable de créer une classe interne, pour un simple JPanel ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    1. Concernant l'utilisation des menus, le "How to use" de sun est dispo ici.
    Concernant l'utilisation des menus, je pense que tu as déjà consulté la JAVA DOC et que des fois ce n'est pas simple à comprendre. Mais j'y retournerais demain, histoire de laisser passer un peu de temps, pour voir si je comprends mieux la chose.


    2. Pour le problème de redimensionnement de la fenêtre, es-tu sûr que le "this.setSize(...)" s'applique bien à la fenêtre ?
    Non je suis débutant et ne suis pas sur de ça, mais en cours, le prof avait filé une piste à un de mes collègues et il m'a semblé que ça pouvait être ça, car je n'ai pas bien entendu ce qu'il avait dit.


    Une remarque : est-ce bien raisonnable de créer une classe interne, pour un simple JPanel ?
    Malheureusement je ne le sais pas, mais vu que c'est la seule façon de faire que nous avons apprise pour le moment, je l'applique. Et ça a marché pour d'autres exercices.

  4. #4
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Si tu veux faire une JMenuBar, tu n'as pas besoin de JPanel...
    Normalement avec ça tu es servi. j'ai pas mal commenté donc tu devrais comprendre assez facilement.
    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
    import java.awt.event.*;
    import javax.swing.*;
     
    /**
     * Une belle fenêtre avec une barre de menu
     * @author Ivelios
     */
    public class FenetreVar extends JFrame implements ActionListener{
     
        /** Constructeur */
        public FenetreVar(){
            super();//Appel du constructeur de JFrame;  super("titre") pour mettre le titre
            this.setTitle("f");//titre de ma fenêtre
            this.setSize(400,400);//taille de la fenêtre
            this.setResizable(false);// redimensionnement--> impossible de redimensionner
            this.setLocationRelativeTo(null);//Placement de la fenetre ---> au milieu de l'écran
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Si on clique sur la croix rouge --> ferme le programme
            this.setJMenuBar(this.creationBarreDeMenu());//Ajout d'une barre de menu à ma fenêtre, donc EN HAUT
            this.setVisible(true);//Affiche la fenetre
        }
     
        /**
         * Crée une JMenuBar
         * @return la JMenuBar de la fenêtre
         */
        private JMenuBar creationBarreDeMenu() {
            /*
             * Tu fais une JMenuBar
             * Tu ajoutes des JMenu dans ta JMenuBar --- Exemple "file", "edit","help",...
             * Tu ajoutes des JMenuItem dans tes JMenu --- Exemple "save", "save as", "print", "quit",...
             *
             * Tu peux aussi ajouter dans JMenu dans des JMenu :D , ça fait apparaitre des petites flèches... j'arrive pas à le dire autrement
            */
     
            //Création des Objets
            JMenuBar jmb = new JMenuBar();
     
            JMenu menu = new JMenu("Fichier");
            JMenu edit = new JMenu("Editer");
            JMenu taille = new JMenu("taille");
     
            JMenuItem itemQuitter = new JMenuItem("Quitter");
            JMenuItem itemPetite = new JMenuItem("Petite");
            JMenuItem itemMoyenne = new JMenuItem("Moyenne");
            JMenuItem itemGrande = new JMenuItem("Grande");
     
            //Ajout des JMenuItem au JMenu
            menu.add(itemQuitter);
     
            taille.add(itemPetite);        
            taille.add(itemMoyenne);
            taille.addSeparator();//un Séparateur
            taille.add(itemGrande);
     
            edit.add(taille);
     
            //Ajout des JMenu au JmenuBar
            jmb.add(menu);
            jmb.add(edit);
     
            //Ajout des listener au JMenuItem
            itemQuitter.addActionListener(this);
            itemPetite.addActionListener(this);
            itemMoyenne.addActionListener(this);
            itemGrande.addActionListener(this);
     
     
            return jmb;
        }
     
        /**
         * Gère les évènements de la barre de menu
         * @param e : l'évènement
         */
        public void actionPerformed(ActionEvent e) {
     
            String action = e.getActionCommand();
     
            if (action.equals("Petite")){
                this.setSize(200, 200);
            }else if(action.equals("Moyenne")){
                this.setSize(400, 400);
            }else if(action.equals("Grande")){
                this.setSize(600, 600);
            }else if(action.equals("Quitter")){// System.exit(0) ---> fermer le programme
                System.exit(0);
            }
     
     
        }
     
        /** Lanceur */
        public static void main(String[] args){new FenetreVar();}
    }
    Prend au moins le temps de lire les commentaires... histoire de me dire que j'ai pas fais tous ça pour rien

    Edit : et pour répondre à tes 3 questions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFenetre.setJMenuBar(monJMenuBar);//Barre de menu en haut de la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    e.getActionCommand();//Et non e.getSource()
    this.setSize(150, 150); // Le this pointe sur le Panel et non sur ta fenêtre

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup
    J'ai lu et relu avec les commentaires
    car j'aime bien comprendre le fonctionnement des choses.

    J'ai tout saisi ce que tu as fait, juste une chose que j'ai pas saisi
    c'est pourquoi tu as fait un "return jmb" juste avant les Action Performed...

    Sinon tout le reste m'a bien éclairé.
    Bien évidemment je ne ferais pas de copier-coller
    Cela m'a bien guidé, et mis sur la bonne voie,
    maintenant à moi d'essayer de le faire à ma façon
    tout en sachant que ta façon est la plus juste.

    Merci à toi,
    et si t'arrives juste à me dire pourquoi le "return"
    Merci.

  6. #6
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    J'aurais pu faire dans le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JMenuBar maBarreDeMenu = new JMenuBar();
    //Remplie la JMenuBar
    //...
    //...
    maFenetre.setJMenuBar(maBarreDeMenu);
    Au lieu surcharger le constructeur et de le rendre illisible je fais la JMenu Bar dans une méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    JMenuBar maBarreDeMenu = this.barreDeMenu();
    maFenetre.setJMenuBar(maBarreDeMenu);
    //Ou directement maFenetre.setJMenuBar(this.barreDeMenu());
    ...
     
     
    /** Méthode qui retourne une JMenuBar*/
    public JMenuBar barreDeMenu(){
    JMenuBar barre = new JMenuBar();
    //Remplissage de la barre de menu
    //...
    //...
    return barre;}// Il faut bien que je retourne ma barre de menu à la fin...
    J'aime bien séparer les grands éléments de mes interfaces graphiques.
    Une méthode pour fabriquer la barre de menu.
    Et une méthode pour faire le panel de la fenêtre.(pas utile pour toi... pour le moment )

    Et dans le constructeur je mets les paramètres de ma fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maFenetre.setJMenuBar(this.barreDeMenu());//Appel de la méthodes qui crée une barre de menu
    maFenetre.setContentPane(this.monPanel());//Appel de la méthodes qui crée un panel
    edit :
    tout en sachant que ta façon est la plus juste.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Points : 31
    Points
    31
    Par défaut
    En tous cas t'es mieux qu'un prof en ligne toi lool
    Tu m'as bien aidé, et éclairé sur pas mal de points avec tes commentaires

    Genre le truc de mettre un String Action à la fin
    je le reprendrais...

    Et le truc de séparer tout le bordel de la JMenuBar de MaFenetre
    J'ai trouvé ça excellent pour la lisibilité.

    Tu m'as appris 2-3 astuces bien sympathique pour mon éducation JAVA

    Merci à toi

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

Discussions similaires

  1. [WD-2010] Option de zoom pour réduire la taille du document?
    Par garheb dans le forum Word
    Réponses: 9
    Dernier message: 04/07/2011, 11h02
  2. Je ne trouve pas l'option pour changer l'âge dans le profil
    Par Marc22 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 5
    Dernier message: 17/05/2010, 12h05
  3. Réponses: 5
    Dernier message: 12/03/2008, 17h38
  4. [bibtex] Changer la taille de la police pour les references
    Par virginie999 dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 21/02/2008, 16h20
  5. Pb pour changer la taille d'un Objet TImage dans une Form
    Par Gouyon dans le forum C++Builder
    Réponses: 10
    Dernier message: 06/06/2006, 19h01

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