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 :

Modification Checkbox d'un panel depuis un autre marche pas


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut Modification Checkbox d'un panel depuis un autre marche pas
    Bonjour.

    voila je vous explique vite fais un petit probleme.

    J'ai une checkbox dans un Jpanel que je check pour passer à un autre panel en rendant invisible le premier et visible le seconde.

    Jusque la no probleme ca va.

    Par contre quand je veux revenir au premier Jpanel et decocher sa case ca coince.

    J'arrive a revenir au Jpanel d'origine a l'afficher et tout mais pas moyen de decocher la case depuis la classe du second JPanel.

    D'ailleur je n'est pas que ca comme probleme mais c'est dans le meme style a savoir j'arrive a rien modifier.

    Voici le code de la fonction appeler par un actionListener sur un bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void termineSauvegarde(){		 
    	this.setVisible(false); // le Jpanel visible en cours
    	this.f.start.setVisible(true); // le JPanel de depart
    	this.f.start.Nsauvegarde.setSelected(false); / la case coché au debut qui appartient au Jpanel start que je veux decocher
    }
    et donc la partie de code qui decoche ne fonctionne pas et si je la met avant le reste du code la le clique sur le bouton ne produit rien.

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    C'est moi qui ne comprends pas ou bien tu utilises la même check box ( un seul objet ) dans 2 JPanels différent ? Dans tel cas, je n'aime pas trop ça et ne saurais te conseiller que de créer deux CheckBox distinctes.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    euh non j'ai qu'une seule checkbox qui n'apparait que dans un seul JPanel.

    En fait f, est la fenetre qui comprend tout les JPanel.

    UN Jpanel est associé a une fenetre et la fenetre a plusieur JPanel c'est tout.

    Donc depuis un Jpanel j'essaie de decocher un CheckBox qui se trouve dans un autre mais j'y arrive pas.


    T'inquiete pas je sais que c'est pas bien d'utiliser la meme checkbox dans deux Jpanel different comme pour tout d'ailleur.

    Sinon personne a une idée pour mon probleme?

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Le fait que les panels aient un lien vers ta fenêtre, je ne trouve pas ça super beau... D'autant plus que tu permets à un panel d'accéder à un la checkbox appartenant à un autre panel de ta fenêtre, ce qui n'est vraiment pas beau puisque tu as tout en public, tout est accessible de partout, et tu peux faire tout et n'importe quoi... Mais bon c'est une autre histoire...

    Pour ce qui est de ton problème, c'est difficile de se rendre compte avec si peu de code.

    Vérifie que l'état de ta checkbox n'est pas modifié ailleurs.
    Fais un repaint() de ton premier panel au cas où (même si ça m'étonnerait que ça vienne de là).

    Après, je ne sais pas trop. Faudrait voir plus de code...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    je l'ai mis en public parceque ca marchait deja pas en private alors c'etait pour voir.

    Ensuite pour l'histoire du lien vers la fenetre explique moi comment faire autrement, car c'est beau de dire c'est pas beau mais donne des indications.

    Ensuite tu veux je te donne quoi en code de plus.

    Ca c'est la fonction qui se trouve dans une action c'est tout.
    La checkbox est checké par l'utilisateur pour passer a un autre JPanel, une fois les actions finis dans ce Jpanel je veux revenir au Jpanel de départ mais decocher cette foutue checkbox.

    voila le code de l'action terminer en cliquant sur le bouton terminer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void actionPerformed(ActionEvent e) {
    if("terminer".equals(e.getActionCommand())){
    	this.panel.termineSauvegarde();
    }
    }

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par zulot
    je l'ai mis en public parceque ca marchait deja pas en private alors c'etait pour voir.

    Ensuite pour l'histoire du lien vers la fenetre explique moi comment faire autrement, car c'est beau de dire c'est pas beau mais donne des indications.
    Bizarrement ça ne me donne pas envie de te répondre...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Citation Envoyé par seiryujay
    Bizarrement ça ne me donne pas envie de te répondre...
    Tout comme ton intervention ne me donnait pas envie de repondre, ca faisait un peu du style bah c'est nul, c'est nul, c'est nul, tu dois etre nul, et puis tu nous donnes pas grand choses.

    Alors escuse moi mais dire aux autres c'est pas bien ce que tu fais mais je te donne pas de piste c'est pas forcement super sympa pour la personne a qui tu reponds.

  8. #8
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Le code parfait n'existe pas, et se faire dire qu'un code n'est pas beau est courant. Mais on est à peu près tous d'accord avec toi pour dire que le second JPanel ne devrait pas avoir accès directement à la JCheckBox.

    Le plus propre (à mon goût ) est de rassembler les actions dans le composant qui contient tous ceux qui vont changer. Par exemple ta méthode termineSauvegarde va entraîner des modifications dans les 2 JPanels : elle devrait être définie dans le composant qui contient ces 2 JPanels (une JFrame, apparemment). Comme ça, plus besoin d'avoir des références dans tous les sens :
    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
    JFrame :
    public void actionPerformed(ActionEvent e) {
      if("terminer".equals(e.getActionCommand())){
        jpanel1.faitCeQuIlFaut1();
        jpanel2.faitCeQuIlFaut2();
      }
    }
     
    JPanel1 :
    public void faitCeQuIlFaut1() {
      Nsauvegarde.setSelected(false);
      ...
    }
     
    JPanel2:
    boutonTerminer.addActionListener(maJFrame);
     
    public void faitCeQuIlFaut2() {
      // à toi de voir
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Oki je comprend bien.

    Mais mon action termine sauvegarde s'applique grace a l'appuie sur un bouton du Jpanel 2.

    Si je creer une classe action precise que j'appelerais action.
    qui lancera terminerSauvegarde.

    le code suivant est il bon :

    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
     
    Action :
    public void actionPerformed(ActionEvent e) {
      if("terminer".equals(e.getActionCommand())){
        JFrame.terminerSauvegarde();
      }
    }
     
    JFrame :
    public void terminerSauvegarde(){
       Jpanel1.faire1();
       Jpanel2.faire2();
    }
     
    JPanel1 :
    public void faire1() {
      Nsauvegarde.setSelected(false);
      ...
    }
     
    JPanel2:
    boutonTerminer.addActionListener(new Action(this));
     
    public void faire2() {
      // à toi de voir
    }
    Le code comme ca est il bon?

    parceque je crois que j'ai deja pas mal d'action dans ma JFrame :-(

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Grace a ton explication j'ai compris certaine chose qui m'ont beaucoup aidé.

    Je t'en remerci.

    Du coup j'ai cahngé pas mal de chose dans mon code (il est devenu illisible à certain endroit mais bon faut je purge maintenant),
    par contre j'ai du garder l'association de ma fenetre dans le JPAnel sinon je savais pas comment redirigé l'action.
    J'ai pas compris comment metre maFram dans l'actionListener que tu me donnes pourrais tu m'expliquer.

    Du coup j'arrive à unchecker ma checkbox maintenant.

    Merci beaucoup

  11. #11
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par zulot
    J'ai pas compris comment metre maFram dans l'actionListener que tu me donnes pourrais tu m'expliquer.
    Le principe est comme ça :
    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 MaJFrame extends JFrame implements ActionListener {
    
      public MaJFrame() {
        ...
        JPanel panel1 = new JPanel ...
        JButton button = new JButton(...);
        button.addActionListener(this);
        ...
      }
    
      public void actionPerformed(ActionEvent e) {
        if(...equals(e.getActionCommand()) {
          // c'est utile quand on fait un truc qui
          // implique plusieurs composants dans la fenêtre
          JPanel panel = new JPanel(...);
          panel.add(...);
          this.getContentPane().add(panel, BorderLayout.SOUTH);
        }
      }
    }
    Si le bouton ne doit entraîner des changements que dans le JPanel, j'essaierai d'utiliser une classe du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class MonJPanel extends JPanel implements ActionListener
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    oui j'utilise bien une classe comme tu le decris.

    Par contre pour le debut c'est pas ca que je demandais.

    c'est cette partie que j'ai pas comprise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    JPanel2:
    boutonTerminer.addActionListener(maJFrame);
     
    public void faitCeQuIlFaut2() {
      // à toi de voir
    }
    Comment dans cette classe JPanel2 je peux ajouter maFrame dans addActionListener sans que cette frame soit associé au JPanel?

  13. #13
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Ah, ben la tu as 3 solutions :
    - soit tu crées le JPanel2 dans la classe de ta JFrame (comme dans mon 1er bout de code), et tu utilises this.
    - soit tu as une classe pour le JPanel2, et tu passes une référence de ta fenêtre au constructeur, juste le temps d'y faire le addActionListener.
    - soit tu utilises JPanel2.getParent récursivement jusqu'à ce que tu tombes sur une JFrame (moi ça me plaît pas, c'est très crade).

    La question est de savoir si tu as besoin de définir une classe pour JPanel2, ça te permet de choisir entre les 2 premières solutions.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    oki c'est bien ce que je pensais j'ai opté pour la solution 2 :-)

    Mon Jpanel2 etant assez complexe avec pas mal d'action et de boutons.

    Merci de ton aide en tout cas.

    Je me debrouille un peu en programmation mais pas encore d'automatisme pour rendre le code lisible et propre mais je m'y attele.

    D'ou ce genre de probleme.

    Merci encore.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/10/2009, 03h50
  2. Modification d'une liste déroulante depuis une autre fenètre ouvertre
    Par dirty_harry dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/06/2009, 14h38
  3. Réponses: 2
    Dernier message: 10/04/2009, 15h03
  4. Mis à jour d'un panel depuis un autre
    Par corbel88 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 28/04/2008, 22h16
  5. Evenement sur un panel depuis un autre panel
    Par ensisoft dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 11/01/2008, 17h26

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