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 :

Ajouter un menu à une fenêtre


Sujet :

AWT/Swing Java

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Ajouter un menu à une fenêtre
    Bonjour,

    Je suis entrain de développer une application swing en mvc et je cherche à ajouter un menu à ma page d'accueil or celui-ci ne s'affiche pas quand je lance l'application. Mon menu est le même pour plus formulaire de l'application.
    Voici ma classe Accueil:
    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
    public class Accueil extends JFrame{
    	private MenuBar menu;
    	public Accueil(){
    		setTitle("Gestion d'emploi du temps");
    		setSize(600, 600);
    		menu = new MenuBar();
    		setMenuBar(menu);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
     
    	public static void main(String[] args) {
        	Accueil frame = new Accueil();
        	frame.setVisible(true);
        }
    }
    et ma classe MenuBar:
    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
    public class MenuBar extends JMenuBar{
    	private JMenuBar barreMenu;
    	private JMenu fichier, edition;
    	private JMenuItem ouvrir, sauvegarder, fermer, copier, coller;
    	public MenuBar(){
    		barreMenu = new JMenuBar();
    		fichier = new JMenu("Fichier");
    		barreMenu.add(fichier);
    		ouvrir = new JMenuItem("Ouvrir");
    		fichier.add(ouvrir);
    		sauvegarder = new JMenuItem("Sauvegarder");
    		fichier.add(sauvegarder);
    		fermer = new JMenuItem("Fermer");
    		fichier.add(fermer);
    		edition = new JMenu("Edition");
    		barreMenu.add(edition);
    		copier = new JMenuItem("Copier");
    		edition.add(copier);
    		coller = new JMenuItem("Coller");
    		edition.add(coller);
    	}
     
    	public void setMenuBar(JMenuBar menu){
    		this.barreMenu = menu;
    	}
    }
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu créés une barre de menu à l'intérieur de ta barre de menu, définie par la classe MenuBar, et tu ajoutes les entrées de menu à cette barre : or, c'est la barre MenuBar que tu ajoutes à la JFrame, pas celle qui se trouve à l'intérieur. Essaye juste de remplacer barreMenu = new JMenuBar(); par barreMenu = this; et tu verras... ensuite, vire cette barre barreMenu, et ajoute directement les entrées à ton instance de MenuBar.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Dans le constructeur de ton MenuBar, tu crée un autre Menu auquel tu ajoute tous les éléments. Du coup, ton MenuBar reste vide... C'est dans ton MenuBar qu'il faut ajouter les menus!

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai remplacer le new par le this et sa passe nickel. J'ai rien eu d'autre à faire

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    En revanche, j'ai un autre problème que je ne vois pas comment faire. Quand je clique par exemple sur nouveau dans mon menu, je voudrais que cela m'affiche une liste d'année. J'ai donc préparer ma classe année mais je vois pas comment repeindre Accueil pour afficher ma liste d'année tout en gardant mon menu.

    Classe Accueil:
    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
    public class Accueil extends JFrame{
    	private MenuBar barreMenu;
    	public Accueil(){
    		setTitle("Gestion d'emploi du temps");
    		setSize(600, 600);
    		barreMenu = new MenuBar();
    		setJMenuBar(barreMenu);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	}
     
    	public static void main(String[] args) {
        	Accueil frame = new Accueil();
        	frame.setVisible(true);
        }
    }
    Classe ChoixAnnee:
    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
    public class ChoixAnnee implements ListSelectionListener{
    	private JList liste;
        private String[] annee = {"2010-2011", "2011-2012", "2012-2013", "2013-2014",
        "2014-2015", "2015-2016", "2016-2017"};
        public ChoixAnnee(){
        	liste = new JList(annee);
        	JScrollPane ascenseur = new JScrollPane(liste);
        	ascenseur.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        	liste.addListSelectionListener(this);
        }
     
    	public void valueChanged(ListSelectionEvent arg0) {
     
    	}
    }
    Classe Menu:
    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
    public class MenuBar extends JMenuBar implements ActionListener {
    	private JMenuBar barreMenu;
    	private JMenu fichier, edition;
    	private JMenuItem ouvrir, nouveau, sauvegarder, fermer, copier, coller;
    	private ChoixAnnee choixAnnee;
    	public MenuBar(){
    		barreMenu = this;
    		fichier = new JMenu("Fichier");
    		barreMenu.add(fichier);
    		nouveau = new JMenuItem("Nouveau");
    		fichier.add(nouveau);
    		nouveau.addActionListener(this);
    		ouvrir = new JMenuItem("Ouvrir");
    		fichier.add(ouvrir);
    		sauvegarder = new JMenuItem("Sauvegarder");
    		fichier.add(sauvegarder);
    		fermer = new JMenuItem("Fermer");
    		fichier.add(fermer);
    		edition = new JMenu("Edition");
    		barreMenu.add(edition);
    		copier = new JMenuItem("Copier");
    		edition.add(copier);
    		coller = new JMenuItem("Coller");
    		edition.add(coller);
    	}
     
    	public void actionPerformed(ActionEvent event) {
    		Object source = event.getSource();
    		if (source == nouveau) {
    			choixAnnee = new ChoixAnnee();
    		}
    	}
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Déjà ChoixAnnee n'est pas affichable : il faut pouvoir mettre le JScrollPane dans un container (un JPanel par exemple), que tu pourrais passer en paramètre.

    Mais tu vas t'embêter à l'afficher dans la fenêtre, avec le cycle (confirmer/annuler) : tu devrais plutôt l'afficher dans un dialog (JDialog).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Mais après avoir choisit l'année, je vais afficher mon calendrier selon l'année choisit. Donc je vais repeindre le formulaire de choix de l'année

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Mais après avoir choisit l'année, je vais afficher mon calendrier selon l'année choisit. Donc je vais repeindre le formulaire de choix de l'année
    Comprends pas. Repeindre ? Quel formulaire de choix de l'année ?

    Je vois dans la classe ChoixAnnee une JList. On y choisit je suppose une année et quoi après ? Elle sert à quoi cette année ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Cette année va me permettre d'afficher un planning ou je vais pouvoir ajouter des réunions dessus, etc.

    Pour le JPanel, je peux créer une classe Panneau qui va étendre JPanel et cette classe pourra être réutiliser par plusieurs formulaire?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Pour le JPanel, je peux créer une classe Panneau qui va étendre JPanel et cette classe pourra être réutiliser par plusieurs formulaire?
    Oui, tu peux. Mais si tu affiches ce Panneau dans la JFrame, tu vas devoir gérer un état pour la frame (Panneau déjà affiché, ou non affiché) et gérer cet état pour tous les menus : par exemple, si on refait "Nouveau", alors que le choix des années ne doit pas être réaffichée puisqu'il l'est déjà. Et puis, comment tu gères le fait de ne plus afficher le Panneau ? Sur quelle action ? Sans parler du contrôle de l'agenda par rapport à l'année : on va voir le calendrier seulement quand l'année est sélectionnée ou avant ?
    C'est bien plus simple de gérer ça dans un JDialog (ou alors, si tu as peu d'années, et que c'est le seul paramètre, tu peux aussi mettre carrément les années en menu.)
    Ou alors c'est un assistant à plusieurs volets que tu cherches à faire ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Le calendrier se créé dès qu'on choisi l'année

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai une classe Panneau mais je vois pas comment faire pour pouvoir l'utiliser dans plusieurs formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Panneau extends JPanel {
    	public Panneau() {
     
    	}
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    	}
    }
    Par exemple, dans accueil, je vais faire new Panneau(this) et dans ChoixAnnee: new Panneau(this)

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Déjà ce n'est pas la classe Panneau que tu vas utilisé dans plusieurs formulaires mais des instances de la classe Panneau.

    Quand tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    JFrame frame1 = new JFrame("Fenetre 1");
    JFrame frame2 = new JFrame("Fenetre 2");
     
    JPanel panel1 = new JPanel();
    frame1.getContentPane().ad(panel1);
     
    JPanel panel2 = new JPanel();
    frame2.getContentPane().add(panel2);
    Tu as bien 2 instances de classe JPanel dans 2 instances de JFrame différentes. Remplace JPanel par Panneau : c'est pareil.


    Ensuite, si tu as besoin de passer un argument au constructeur (le this dans tes 2 exemples), il faut que le constructeur du panel est un paramètre, et que ce paramètre ait bien entendu un type compatible, ou qu'il y ait 2 constructeurs avec les 2 types. Mais il faut surtout et avant tout qu'il y ait un but à passer en paramètre un composant : qu'est-ce que Panneau doit faire avec ces objets passés en paramètre ? En fonction de ce que Panneau doit faire avec ces objets, tu pourras déterminer le type qu'ils doivent avoir. Si par chance ils ont déjà ce type, tu n'auras pas grand chose à faire. Sinon, il te faudra résoudre cette problématique et éventuellement faire soit une Interface, soit une Abstraction.


    Cela dit, je ne vois pas trop le rapport avec la question que tu posais... Enfin, sans insister, je pense que tout ce que tu as à faire ce sont des dialogues. Mais peut-être que si je pouvais visualiser l'interface graphique que tu cherches à mettre en place, je comprendrais mieux de quoi tu parles, et pourquoi tu ne veux pas faire de dialogue.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai créer mon panneau mais quand je clique sur nouveau dans mon menu, j'ai toujours pas ma liste avec mes années qui s'affiche. Sa doit être la méthode repaint() qui doit me manquer mais je vois pas où la mettre:
    Classe Panneau:
    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
    public class Panneau extends JPanel {
    	private Accueil accueil;
    	private ChoixAnnee choixAnnee;
     
    	public Panneau(Accueil accueil) {
    		this.accueil = accueil;
    	}
     
    	public Panneau(ChoixAnnee choixAnnee) {
    		this.choixAnnee = choixAnnee;
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    	}
    }
    MenuBar:
    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
    public class MenuBar extends JMenuBar implements ActionListener {
    	private JMenuBar barreMenu;
    	private JMenu fichier, edition;
    	private JMenuItem ouvrir, nouveau, sauvegarder, fermer, copier, coller;
    	private ChoixAnnee choixAnnee;
    	public MenuBar(){
    		barreMenu = this;
    		fichier = new JMenu("Fichier");
    		barreMenu.add(fichier);
    		nouveau = new JMenuItem("Nouveau");
    		fichier.add(nouveau);
    		nouveau.addActionListener(this);
    		ouvrir = new JMenuItem("Ouvrir");
    		fichier.add(ouvrir);
    		sauvegarder = new JMenuItem("Sauvegarder");
    		fichier.add(sauvegarder);
    		fermer = new JMenuItem("Fermer");
    		fichier.add(fermer);
    		edition = new JMenu("Edition");
    		barreMenu.add(edition);
    		copier = new JMenuItem("Copier");
    		edition.add(copier);
    		coller = new JMenuItem("Coller");
    		edition.add(coller);
    	}
     
    	public void actionPerformed(ActionEvent event) {
    		Object source = event.getSource();
    		if (source == nouveau) {
    			choixAnnee = new ChoixAnnee();
    		}
    	}
    }
    Accueil:
    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
    public class Accueil extends JFrame{
    	private MenuBar barreMenu;
    	private Panneau panneau;
    	public Accueil(){
    		setTitle("Gestion d'emploi du temps");
    		setSize(600, 600);
    		barreMenu = new MenuBar();
    		setJMenuBar(barreMenu);
    		panneau = new Panneau(this);
    		getContentPane().add(panneau);
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	}
     
    	public static void main(String[] args) {
        	Accueil frame = new Accueil();
        	frame.setVisible(true);
        }
    }
    ChoixAnnee:
    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
    public class ChoixAnnee extends JFrame implements ListSelectionListener{
    	private JList liste;
        private String[] annee = {"2010-2011", "2011-2012", "2012-2013", "2013-2014",
        "2014-2015", "2015-2016", "2016-2017"};
        private Panneau panneau;
        public ChoixAnnee(){
        	liste = new JList(annee);
        	JScrollPane ascenseur = new JScrollPane(liste);
        	ascenseur.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        	liste.addListSelectionListener(this);
    		panneau = new Panneau(this);
    		panneau.add(liste);
    		getContentPane().add(panneau);
        }
     
    	public void valueChanged(ListSelectionEvent arg0) {
     
    	}
    }

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, mais tes classes tu me les as déjà montrées. Et ça ne me permet pas de voir comment tu cherches à organiser ton UI. Je pensais à quelque chose de plus graphique, ou du moins descriptif. Sans ça, je ne sais pas quoi te dire d'autre que ce que je t'ai déjà dit.


    En tout cas, voici un exemple avec Dialogues (vite fait en le minimum de classes), si çà correspond à la dynamique de ton UI (le formulaire dans le fond de la frame à ce que j'ai bien compris) :

    La fenêtre principale :
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    public class Accueil extends JFrame {
     
    	private static final String APPLICATION_NAME = "Mon application Trucmuche";
     
    	private static final String COMMANDE_AJOUTER = "AJOUTER";
    	private static final String COMMANDE_QUITTER = "QUITTER";
    	private static final String COMMANDE_SAUVER = "SAUVER";
    	private static final String COMMANDE_FERMER = "FERMER";
     
    	private static final String[] ANNEES =  {"2010-2011", "2011-2012", "2012-2013", "2013-2014",
    	    "2014-2015", "2015-2016", "2016-2017"};
     
    	private boolean dirty;
     
    	private Map<String, Action> actions = new HashMap<>();
     
    	private Formulaire formulaire;
     
    	public Accueil() {
    		 super(APPLICATION_NAME);
    		 setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    		 addWindowListener(new WindowAdapter() { // permet de réagir à la fermeture plus finement
    			 @Override
    			public void windowClosing(WindowEvent e) {
    				 if ( isDirty() ) {
    					 switch( JOptionPane.showConfirmDialog(Accueil.this, 
    							 "Vous avez des données non sauvegardées...\n\nVoulez-vous les sauver et quitter ?", 
    							 APPLICATION_NAME, JOptionPane.YES_NO_CANCEL_OPTION) ) {
    					 case JOptionPane.YES_OPTION:
    						 save();
    					 case JOptionPane.NO_OPTION:
    						 Accueil.this.dispose();
    					 case JOptionPane.CANCEL_OPTION:
    					 }
    				 }
    				 else {
    					 switch( JOptionPane.showConfirmDialog(Accueil.this, 
    							 "Voulez-vous quitter l'application ?", 
    							 APPLICATION_NAME, JOptionPane.YES_NO_OPTION) ) {
    					 case JOptionPane.YES_OPTION:
    						 Accueil.this.dispose();
    					 case JOptionPane.NO_OPTION:
    					 }
    				 }
    			}
    		});
     
     
                     // le menu
    		JMenuBar menuBar = new JMenuBar();
    		JMenu menu = new JMenu("Fichier");
    		menuBar.add(menu);
     
                    // 4 actions 
    		menu.add(createMenu("Ajouter",COMMANDE_AJOUTER)); // ajouter un nouveau machin
    		menu.add(createMenu("Sauver",COMMANDE_SAUVER)); // sauver le bidule en cours de saisie en cours
    		menu.add(createMenu("Fermer",COMMANDE_FERMER)); // fermer le formulaire actuellement affiché
    		menu.add(createMenu("Quitter",COMMANDE_QUITTER)); // quitter l'application
     
    		setJMenuBar(menuBar);
     
                    // par défaut, sauver et fermer sont inactifs
    		actions.get(COMMANDE_SAUVER).setEnabled(false);
    		actions.get(COMMANDE_FERMER).setEnabled(false);
     
    	}
     
    	private JMenuItem createMenu(String label, final String command) {
    		AbstractAction action = new AbstractAction(label) {
     
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				doAction(command);
    			}
    		};
     
    		actions.put(command, action);
     
    		return new JMenuItem(action);
    	}
     
    	protected void doAction(String command) {
    		switch(command) {
    		case COMMANDE_AJOUTER:
    			if ( isDirty() ) {
    				switch( JOptionPane.showConfirmDialog(Accueil.this, 
    						 "Vous avez des données non sauvegardées...\n\nVoulez-vous les sauver et créer un nouveau machin ?", 
    						 APPLICATION_NAME, JOptionPane.YES_NO_CANCEL_OPTION) ) {
    				case JOptionPane.YES_OPTION:
    					save();
    				case JOptionPane.NO_OPTION:
    					effacerFormulaire();
    				case JOptionPane.CANCEL_OPTION:
    					return;
    				}
    			}
    			ajouter();
    			break;
    		case COMMANDE_QUITTER:
    			dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
    			break;
    		case COMMANDE_SAUVER:
    			save();
    			break;
    		case COMMANDE_FERMER:
    			if ( isDirty() ) {
    				switch( JOptionPane.showConfirmDialog(Accueil.this, 
    						 "Vous avez des données non sauvegardées...\n\nVoulez-vous les sauver et fermer la ficher?", 
    						 APPLICATION_NAME, JOptionPane.YES_NO_CANCEL_OPTION) ) {
    				case JOptionPane.YES_OPTION:
    					save();
    				case JOptionPane.NO_OPTION:
    				case JOptionPane.CANCEL_OPTION:
    					return;
    				}
    			} 
    			effacerFormulaire();
    			break;
    		}
    	}
     
            // la méthode demande d'abord une année dans une liste : si elle est saisie, alors on créé un formulaire que l'on met dans le fond de la fenêtre
    	protected void ajouter() {
     
    		JPanel panel = new JPanel();
    		panel.add(new JLabel("Saisir l'année :"));
    		JComboBox<String> combo = new JComboBox<String>(ANNEES);
    		panel.add(combo);
     
     
    		final JOptionPane optionPane = new JOptionPane(panel, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
     
    		JDialog dialog = new JDialog(this, true);
    		dialog.setContentPane(optionPane);
     
    		dialog.pack();
    		dialog.setLocationRelativeTo(this);
     
    		dialog.setDefaultCloseOperation(
    			    JDialog.DO_NOTHING_ON_CLOSE); 
    		optionPane.addPropertyChangeListener(
    		    new PropertyChangeListener() {
    		        public void propertyChange(PropertyChangeEvent e) {
    		            String prop = e.getPropertyName();
     
    		            if (dialog.isVisible() 
    		             && (e.getSource() == optionPane)
    		             && (prop.equals(JOptionPane.VALUE_PROPERTY))) {
     
    		                dialog.setVisible(false);
    		            }
    		        }
    		    });
     
    		dialog.setVisible(true);
     
     
    		 if ( optionPane.getValue() instanceof Integer && ((Integer)optionPane.getValue())==JOptionPane.OK_OPTION ) {
    			 String anneeSelection = (String)combo.getSelectedItem();
    			 afficherFormulaire(anneeSelection);
    		 }
     
    	}
     
            protected void afficherFormulaire(String anneeSelection) {
    		// ... afficher le formulaire...
    		formulaire = new Formulaire(this, anneeSelection);
    		getContentPane().add(formulaire);
    		getContentPane().revalidate();
    		getContentPane().repaint();
    		actions.get(COMMANDE_FERMER).setEnabled(true);
    	}
     
     
    	protected void effacerFormulaire() {
    		// ... cacher le formulaire
    		if (formulaire!=null) {
    			getContentPane().remove(formulaire);
    			formulaire=null;
    			getContentPane().revalidate();
    			getContentPane().repaint();
    			resetDirty();
    			actions.get(COMMANDE_FERMER).setEnabled(false);
    		}
    	}
     
    	protected boolean isDirty() {
    		return dirty;
    	}
     
    	public void save() {
    		if ( isDirty() ) {
    			if ( formulaire!=null ) {
    				// je fais la sauvegarde de ce qu'il y a dans le formulaire....
    			}
    			resetDirty();
    		}
    	}
     
    	public void setDirty() {
                    if ( formulaire!=null ) {
    		this.dirty=true;
    		actions.get(COMMANDE_SAUVER).setEnabled(true);
                    }
    	}
     
    	private void resetDirty() {
    		this.dirty=false;
    		actions.get(COMMANDE_SAUVER).setEnabled(false);
    	}
     
    }
    Le formulaire (il pourrait y en avoir plusieurs, mais il y a qu'une action) :
    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
     
    public class Formulaire extends JPanel {
     
    	private JTextField field;
     
    	public Formulaire(final Accueil parent, String annee) {
    		super(new GridBagLayout()); // etc...
    		Insets insets = new Insets(2,2,2,2);
     
    		add( new JLabel("Année choisie : " + annee) , new GridBagConstraints(0, 0, 2, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, insets, 0, 0)); // ici çà pourrait très bien être un calendrier ou ce que tu veux...
     
    		add( new JLabel("Bidule:") , new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.BASELINE_TRAILING, GridBagConstraints.NONE, insets, 0, 0));
     
    		field = new JTextField(10);
    		field.getDocument().addDocumentListener(new DocumentListener() {
     
    			@Override
    			public void removeUpdate(DocumentEvent e) {
    				parent.setDirty();
    			}
     
    			@Override
    			public void insertUpdate(DocumentEvent e) {
    				parent.setDirty();
    			}
     
    			@Override
    			public void changedUpdate(DocumentEvent e) {
    				parent.setDirty();
    			}
    		});
    		add( field , new GridBagConstraints(1, 1, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.HORIZONTAL, insets, 0, 0));
     
    	}
     
    	public String getBidule() {
    		return field.getText();
    	}
     
    	public void setBidule(String bidule) {
    		this.field.setText(bidule);
    	}
     
    }
    Le launcher :

    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
     
    public class Demo {
     
    	public static void main(String[] args) {
     
     
    		Accueil mainFrame = new Accueil();
     
     
    		mainFrame.setSize(300, 300);
     
    		mainFrame.setLocationRelativeTo(null);
     
    		mainFrame.setVisible(true);
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Quand j'ouvre mon application, j'arrive sur la page d'accueil qui contient juste le menu. Quand dans le menu, je clique sur nouveau, sa doit m'afficher ma liste d'année à la place de ma page d'accueil et quand je sélectionne une année et que je cliquerais par la suite sur un bouton valider sa va me créer mon planning qui sera affiché

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    J'ai créer mon panneau mais quand je clique sur nouveau dans mon menu, j'ai toujours pas ma liste avec mes années qui s'affiche. Sa doit être la méthode repaint() qui doit me manquer mais je vois pas où la mettre:
    Classe Panneau:
    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
    public class Panneau extends JPanel {
    	private Accueil accueil;
    	private ChoixAnnee choixAnnee;
     
    	public Panneau(Accueil accueil) {
    		this.accueil = accueil;
    	}
     
    	public Panneau(ChoixAnnee choixAnnee) {
    		this.choixAnnee = choixAnnee;
    	}
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    	}
    }
    Non, ce n'est pas parce que tu n'appelles pas repaint(), c'est parce que le JPanel est vide. Il suffit pas de lui passer des trucs en paramètres, il faut mettre des composants graphiques dans le panel pour qu'ils s'affichent (pour choixAnnée, je te parlais de la JList). Mais de toute manière, le panel doit lui-meme être dans un container, et je devine qu'en passant ChoixAnnee en paramètre de Panneau, tu cherches à l'afficher dans le fond de ta fenêtre, ce qui ne se fait déjà pas comme ça (pas dans ce sens : regarde comment j'ai fait dans mon exemple : les méthodes afficherformulaire et effacerFormulaire) et de tout manière pour le choix de l'année, Ensuite, si le choix de l'année détermine la création du formulaire, il vaut mieux le faire par dialogue (voir mon exemple), et si cette année fait partie des données du formulaire, il faut le faire comme j'ai fait pour le champ bidule du formulaire...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je l'ajoute bien à mon panneau pourtant ma liste:

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Quand j'ouvre mon application, j'arrive sur la page d'accueil qui contient juste le menu. Quand dans le menu, je clique sur nouveau, sa doit m'afficher ma liste d'année à la place de ma page d'accueil et quand je sélectionne une année et que je cliquerais par la suite sur un bouton valider sa va me créer mon planning qui sera affiché
    D'accord, c'est bien ce que j'avais compris : donc je te dis que c'est bien plus simple d'afficher la liste d'années dans un dialogue. Sinon tu vas galérer pour gérer les différents états de l'UI : tu pourras le faire un jour, mais pour l'instant comme tu poses la question, c'est que tu ne sais pas le faire, donc je préfère t'orienter sur une solution simple, à base de JDialog. Ce qui te permet de gérer qu'un seul état. Déjà dans mon exemple, tu verras qu'il y en a 2 : ouvert/modifié (dirty), ce qui complique déjà un peu. Si le formulaire avait été mis lui même dans un JDialog modal, ça aurait été encore plus simple : un seul état : modifé. Avec la saise de l'année dans le formulaire, ça fait 3 états: choix de l'année en cours, ouvert, modifié.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par totot Voir le message
    Je l'ajoute bien à mon panneau pourtant ma liste:
    Ah, oui, j'avais pas vu que t'avais modifié ton code initial et que ChoixAnnee était devenu une JFrame : tu instancies la JFrame par new ChoixAnnee, mais elle n'est pas affichée par setVisible(true). Mais le faire dans une autre JFrame n'est pas plus simple que de le faire dans la JFrame Accueil : les 2 JFrame sont indépendantes, on peut même fermer Accueil sans fermer ChoixAnnée. En plus, il va falloir les faire communiquer... et donc on en revient au fait que ChoixAnnee devrait être un JDialog modal !
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Ajout JPanel dans une fenêtre
    Par khalidwh dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 13/01/2014, 03h09
  2. Ajouter un menu à une action de style "pulldown"
    Par kkt8 dans le forum Eclipse Platform
    Réponses: 9
    Dernier message: 10/01/2013, 16h43
  3. Réponses: 2
    Dernier message: 02/01/2011, 09h46
  4. [Vulcan.Net] Choix d'une image pour un menu, une fenêtre, etc.
    Par JYves dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 17/08/2006, 16h42
  5. Ajouter un menu à une dialog form
    Par firejocker dans le forum MFC
    Réponses: 2
    Dernier message: 22/11/2005, 18h36

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