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 :

Récupérer le label d'une checkbox d'une JFrame à partir d'une autre JFrame


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2020
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Récupérer le label d'une checkbox d'une JFrame à partir d'une autre JFrame
    Salut,
    Comment faire pour récupérer le Label d'un checkbox contenu dans une JFrame à partir d'une autre JFrame.
    En fait j'ai deux JFrames, la première JFrame1 et la deuxième JFrame2. Dans la JFrame1 j'ai un checkbox étudiant, je récupère le label de la checkbox grâce à étudiant.getLabel() en étant dans la JFrame1. Je veux utiliser le Label de la checkbox étudiant récupéré dans la JFrame1 comme JMenuImtem dans la JFrame2, ce que je n'arrive pas à faire.
    Svp quelqu'un pour m'aider!
    Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 324
    Points : 435
    Points
    435
    Par défaut
    Bonjour,

    Si vos deux JFrame utilisent un modèle commun et sont lancées dans le processus, il n'y à pas de raison qu'elles ne puisent pas partager de données.

    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
     
    public class Application {
        public static void main(String[] args) {
            new Application().start();
        }
     
        private final JFrame frame1;
        private final JFrame frame2;
     
        Application() {
            AppModel model = new AppModel();
            frame1 = new FormFrame(model);
            frame2 = new MenuFrame(model);
        }
     
        void start() {
            SwingUtilities.invokeLater(()->{
                frame1.setVisible(true);
                frame2.setVisible(true);
            });
        }
    }
     
    class FormFrame extends JFrame {
        private final JCheckBox checkbox = new JCheckBox("{Nom de l'élève}");
     
        public FormFrame(AppModel model) {
            setMinimumSize(new Dimension(200, 120));
            add(checkbox);
     
            checkbox.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    model.setSelectedStudent(checkbox.getText());
                }
            });
        }
    }
     
    class MenuFrame extends JFrame {
        private final JMenuBar menu = new JMenuBar();
        public MenuFrame(AppModel model) {
            menu.add(new JMenu("Menu 1"));
            setMinimumSize(new Dimension(200, 120));
            setJMenuBar(menu);
     
            model.addStudentSelectionListener(new StudentSelectionListener() {
                public void onStudentSelected(String name) {
                    menu.add(new JMenu(name));
                    SwingUtilities.invokeLater(menu::validate);
                }
            });
        }
    }
     
    class AppModel {
        private final EventListenerList listeners = new EventListenerList();
        void setSelectedStudent(String student) {
            StudentSelectionListener[] lstnrs = listeners.getListeners(StudentSelectionListener.class);
            for (int i = lstnrs.length-1; i >- 1; i--) {
                lstnrs[i].onStudentSelected(student);
            }
        }
     
        void addStudentSelectionListener(StudentSelectionListener lstnr) {
            listeners.add(StudentSelectionListener.class, lstnr);
        }
    }
     
     
    interface StudentSelectionListener extends EventListener {
        void onStudentSelected(String name);
    }

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2020
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    salut Gervais et merci d'avoir pris de ton temps pour répondre à ma préoccupation.
    je pense que l'on ne s'est pas compris, je vais repréciser le problème que je rencontre.
    en fait, j'ai crée deux fenêtres. le première fenêtre nommée Frame1 contient une checkbox
    et un bouton. je voudrais lorsque je clique sur le bouton récupérer label de la checkbox lorsqu'elle est cochée
    et l'utiliser dans la deuxième fenêtre nommée Frame 2 comme menu dans mon menubar

    code de la première fenêtre Frame1
    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 Frame1() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
     
    		JCheckBox etudiant = new JCheckBox("etudiants");
    		etudiant.setBounds(66, 54, 97, 23);
    		contentPane.add(etudiant);
     
    		JButton Buttonvalider = new JButton("valider");
    		Buttonvalider.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				if(etudiant.isSelected()==true) {
    				Frame2 f = new Frame2();
    				f.setVisible(true);
    				}
    			}
    		});
    		Buttonvalider.setBounds(245, 196, 89, 23);
    		contentPane.add(Buttonvalider);
     
    	}
    //méthode qui me permet de récupérer le label de la checkbox
    	public JCheckBox getNom() {
    		JCheckBox etudiant = new JCheckBox("etudiants");
    		return etudiant; 
     
     
    	}
    code de la deuxième fenêtre Frame2

    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
    public Frame2() {
    		//recuperation du label de la checkbox dans la deuxième fenetre si elle est cochée dans le cas contraire la boite de dialogue s'affiche.
     
    		Frame1 frame = new Frame1();
    		if(frame.getNom().isSelected()==false) {
    		String resultat = frame.getNom().getLabel();
    		System.out.println(resultat);
     
    //insertion du label de la checkbox comme menu dans le menubar
     
                   JMenuBar menubar = new JMenuBar();
    	       JMenu menucheckbox = new JMenu(resultat);
    	       setJMenuBar(menubar);
    	       menubar.add(menucheckbox);
    	       this.getContentPane().add(pannel);
    		}
    		else {
    		JOptionPane.showMessageDialog(frame, "la case n'est pas cochée");
    		}
     
    		setSize(500,500);
    		JPanel pannel = new JPanel();
     
    	JMenuBar menubar = new JMenuBar();
    	JMenu menufichier = new JMenu("inscription");
    	JMenuItem itemjeune = new JMenuItem("Jeunes");
    	JMenuItem itempartenaire = new JMenuItem("partenaire");
    	menufichier.add(itemjeune);
    	menufichier.add(itempartenaire);
    	this.setJMenuBar(menubar);
    	menubar.add(menufichier);
    	this.getContentPane().add(pannel);
     
    	}
    je parviens à récupérer le label de la checkbox dans la deuxième fenêtre, car il apparaît dans la console
    grâce au system.out.println sauf que je le fais seulement lorsque if = false (je voudrais déjà comprendre pourquoi)
    chose très bizarre c'est que lors le label est récupérer même lorsque la checkbox n'est pas cochée. ce que je ne veux pas.
    autre souci, je n'arrive pas à intégrer le label de la checkbox qui est récupéré déjà pas comme je souhaite le faire comme menu
    dans le menubar. svp j'ai besoin de votre aide. depuis deux semaines que je parcours le forum, les tutoriels sur le java et les FAQs
    j'ai pas trouvé de solution à mon problème. quelqu'un pour m'aider svp.

  4. #4
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 324
    Points : 435
    Points
    435
    Par défaut
    Bonjour,

    Il y à beaucoup à dire sur votre code, notamment plusieurs "erreurs" qui sont les bases de votre soucis.

    1. La première est sur la récupération du nom;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public JCheckBox getNom() {
      JCheckBox etudiant = new JCheckBox("etudiants");
      return etudiant; 
    }
    Etant donnez que vous faites un new JCheckBox("etudiants") ce sera toujours une checkbox différente de celle créé à la ligne 10 de votre extrait de code. Ce sont des références différentes, le retour de getNom sera donc toujours un case à cocher décochée.

    2. La seconde est dans la gestion du menu dans Frame2;
    Je peux avoir raté une accolade, mais j'ai l'impression quel que soit le résultat de frame.getNom().isSelected() vous allez de toutes façons écraser le menu à la ligne 30 de votre extrait pour Frame2.

    3. La troisième est similaire à la première;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Frame1 frame = new Frame1();
    if(frame.getNom().isSelected()==false) {
      // ...
    La aussi vous créez une nouvelle instance de Frame1, quel que soit l'état de la Frame1 affichée, il ne sera jamais le même que pour cette autre instance de frame.



    Une solution serait d'utiliser la même référence pour votre case à cocher et de passer la référence de Frame1 à Frame2:

    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
    class Frame1 {
      private final JCheckBox etudiant = new JCheckBox("etudiants");
    
      public Frame1() {
        // ...
        JButton Buttonvalider = new JButton("valider");
        Buttonvalider.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
          if(etudiant.isSelected()==true) {
            Frame2 f = new Frame2(this);
            f.setVisible(true);
          }
        });
        // ...
      }
    
      public JCheckBox getNom() {
        return etudiant;
      }
    
      // ...
    }
    
    class Frame2 {
      private final Frame1 frame;
    
      public Frame2(Frame1 frame) {
        this.frame = frame;
        JMenuBar menubar = new JMenuBar();
        //recuperation du label de la checkbox dans la deuxième fenetre si elle est cochée dans le cas contraire la boite de dialogue s'affiche.
    // Ligne à supprimer    Frame1 frame = new Frame1();
        if(frame.getNom().isSelected()==false) {
          String resultat = frame.getNom().getLabel();
          // ...
          JMenu menucheckbox = new JMenu(resultat);
          menubar.add(menucheckbox);
        } else {
          // ...
        }
    
    
        // Ligne à supprimer JMenuBar menubar = new JMenuBar();
        JMenu menufichier = new JMenu("inscription");
        // ...
        this.setJMenuBar(menubar);
        // ...
      }
    
    }
    Notez que je ne sais pas ce qu'est panel dans Frame2 mais la aussi il semble que vous l'ajoutez deux fois..

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2020
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Salut Gervais,
    Une fois de plus merci d'avoir pris de ton temps pour
    m'apporter ton aide.
    J'ai essayé ton code et j'ai eu une erreur au niveau de la
    ligne 10, plus précisément au niveau de la ligne de code suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Frame2 = new Frame2(this)
    Le this passé en paramètre au Frame2 n'est pas reconnu
    et il m'affiche l'erreur suivante :
    the constrictor Frame2(New ActionListener()) is undefined.
    Je sais pas si tu as essayé ton code pour voir s'il fonctionne. Si oui quel est le problème ? J'ai parcouru ton code que tu me proposes du debut jusqu'à la fin je ne trouve rien d'anormal.
    Merci

  6. #6
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 324
    Points : 435
    Points
    435
    Par défaut
    Bonjour,

    Non, je ne l'ai pas testé, je l'ai écrit entre deux tâches. Mais votre problème vient du fait que 'this' reference ici le 'ActionListener' du bouton.
    Il faut donc faire 'Frame1.this' pour référencer l'instance courante de 'Frame1'.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2020
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Salut Gervais,

    Merci pour l'aide que tu m'as apporté, elle m'a permis de résoudre la difficulté que je rencontrerai. J'ai à partir des remarques faites sur mon code, améliorer mon code et il fonctionne à merveille et j'ai le résultat que je souhaitais avoir. Il faut dire également que ton code m'a permis de comprendre beaucoup de notions que j'utilisais sans avoir la bonne compréhension.

    Merci encore pour ta disponibilité et ta promptitude

  8. #8
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 324
    Points : 435
    Points
    435
    Par défaut
    Avec plaisir, je suis content d'avoir pu vous aider.

    Si vous voulez encore améliorer votre code, regardez ma première réponse, celle qui parle d'un "modèle" et documentez vous sur le pattern MVC..
    Bon amusement.


    N'oubliez pas de marquer le question comme résolue si ce n'est déjà fait.

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

Discussions similaires

  1. Récupérer les variables d'une autre fenêtre
    Par chuky dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 20/05/2012, 21h24
  2. Comment récupérer le label d'un Checkbox?
    Par L4BiN dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/06/2006, 14h19
  3. Réponses: 3
    Dernier message: 11/05/2006, 18h47
  4. [Tableaux] récupérer un tableau sur une autre page
    Par samsso2005 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2006, 23h58
  5. Récupérer l'adresse d'une autre fenêtre
    Par AlLutun dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/11/2004, 11h19

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