Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation JCheckBox

récupérer les états (coché ou non) des JCheckBox

Sujet résolu
    20 avril 2017 à 12:22:58

    Bonjour,

    Dans le cadre d'un lecteur de flux RSS que j'essaye de réaliser (afin de me familiariser avec le java), je me retrouve confronté à un problème, pour lequel j’espère vous pourrez m'aider.

    Je crée à un moment dans mon code, une classe "BoxSuppression" héritée de JDialog. 

    Celle ci me permet donc de crée une boite de dialogue, dans laquelle est proposée plusieurs choix à cocher, le but étant de permettre à l'utilisateur de cocher les url des flux RSS qu'il souhaite supprimer. Mon problème est le suivant, étant donné que lors de la déclaration de mes JCheckBox je ne leur donne pas de nom (elles s'appellent toutes jcb), comment récupérer ensuite leur état lors du clic sur le bouton Valider ?

    Je vous laisse mon code afin que vous puissiez m'aider. 

    Merci d'avance 

    package com.affichage;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    
    import com.machine.AdressesRSS;
    
    public class BoxSuppression extends JDialog {
    private JPanel container = new JPanel();
    private JLabel panTop = new JLabel("Cocher les sources que vous souhaiter supprimer.");
    private JPanel panMid = new JPanel();
    private JLabel vide = new JLabel("Il n'y à aucune sources enregistrées.");
    private JScrollPane scroll = new JScrollPane(panMid);
    private JPanel panBot = new JPanel();
    private JButton bouton = new JButton("Valider"); 
    
    	
    	public BoxSuppression(){
    		this.setTitle("Suppression source(s) RSS");
    	    this.setSize(650, 470);
    	    this.setLocationRelativeTo(null);
    	    this.setResizable(false);
    	    this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
    		init();
    		this.setContentPane(container);
    		this.setVisible(true);
    	}
    	
    	private void init(){
    		container.setLayout(new BorderLayout());
    		container.add(panTop, BorderLayout.NORTH);
    		panTop.setBackground(Color.GRAY);
    		panTop.setOpaque(true);
    		container.add(scroll, BorderLayout.CENTER);
    		panMid.setBackground(Color.LIGHT_GRAY);
    		constructionPanMid();
    		container.add(panBot, BorderLayout.SOUTH);
    		panBot.setBackground(Color.LIGHT_GRAY);
    		panBot.add(bouton);
    		bouton.addActionListener(new BoutonListener());
    	}
    	
    	private void constructionPanMid(){
    		AdressesRSS aRSS = new AdressesRSS();
    		if(aRSS.recuperer().length != 0){
    			panMid.setLayout(new GridLayout(aRSS.recuperer().length,1));
    			for(int i = 0; i < aRSS.recuperer().length; i++){
    				JCheckBox jcb = new JCheckBox("Source titre " + (i+1) + " - " + aRSS.recuperer()[i]);
    				panMid.add(jcb);		
    			}
    		}
    		else {
    			panMid.add(vide);
    		}
    	}
    
    }
    
    class BoutonListener implements ActionListener{
    	public void actionPerformed(ActionEvent arg0){
    		System.out.println("appuie bouton detecté.");
    		
    	}
    }
    
    
    



    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2017 à 0:39:49

      Vous pouvez maintenir une liste  de tous les JCheckBox , comme ça quand le button valider est cliqué vousn'aurez qu'à parcourir votre liste pour recupérer leurs états :

      private List<JCheckBox> rssCheckList=new ArrayList<JCheckBox>();
      ......
      
      rssCheckMList.clear();//s'assurer qu'il est vide la liste
      for(int i = 0; i < aRSS.recuperer().length; i++){
          JCheckBox jcb = new JCheckBox("Source titre " + (i+1) + " - " + aRSS.recuperer()[i]);
          panMid.add(jcb);
          rssCheckList.add(jcb);    
      }
      .....
      class BoutonListener implements ActionListener{
          public void actionPerformed(ActionEvent ev){
             for(int i=0;i<rssCheckList.size();i++){
                JCheckBox jcb=rssCheckList.get(i);
                System.out.println(jcb.getText()+" est coché");
                ..........
             }
          }
      }



      • Partager sur Facebook
      • Partager sur Twitter
      MSKD
        22 avril 2017 à 2:14:14

        Merci de ta réponse,

        Malheureusement, ce code ne marche pas, la rssCheckList étant déclarée dans une classe différente de la class BoutonListener. C'est d'ailleurs de cette impossibilité à faire communiquer ces deux classes que naît mon problème.

        Je vais voir si je trouve une solution, mais je reste ouvert à toutes proposition ou aide.

        -
        Edité par Ronan.lv 22 avril 2017 à 3:48:56

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 avril 2017 à 10:29:29

          Dans la création de tes JCheckBox, je ne vois pas l'ajout d'ActionListener, il me semble, je me trompe peut-être, qu'une ligne comme celle ci-dessous, devrait être présente.

          jcb.addActionListener(new ActionListener(){

          ne m'y connaissant pas trop en java (je m'y remet seulement), j'apporte juste ce que j'ai pu comprendre de quelques lectures comme celle-ci...

          EDIT: Dans l'absolu, je traiterais spécifiquement pour chaque JCheckBox, un comportement,

          Exemple :

          class question extends JCheckBox{
          
          	private static final long serialVersionUID = -8835467836358338793L;
          	
          	private int v=0;
          	private int old_note;
          	private int new_note;
          	
          	public question(String myQuestion, int value, Student s){
          	    super(myQuestion);
          	    v = value;
          	    old_note = s.note;
          	    
          	    this.addActionListener(new ActionListener(){
          	    	@Override
                      public void actionPerformed(ActionEvent e) {
          	    		if (isSelected()){
          	    			new_note += v;
          	    		}
          	    		else{
          	    			new_note = old_note;
          	    		}
          	    		s.note += new_note;
                      }
          	    });
          	}
          }



          -
          Edité par Anonyme 22 avril 2017 à 12:42:21

          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2017 à 19:13:19

            RoNaN_ThE_CuBe a écrit:

            Merci de ta réponse,

            Malheureusement, ce code ne marche pas, la rssCheckList étant déclarée dans une classe différente de la class BoutonListener. C'est d'ailleurs de cette impossibilité à faire communiquer ces deux classes que naît mon problème.

            Je vais voir si je trouve une solution, mais je reste ouvert à toutes proposition ou aide.


            ça  te dis quelque chose les classe interne , declare ta classe BoutonListener à l'interieur de  ta classe BoxSupression , comme ça elle aura accès  à tous les attributs de la classe BoxSupression dans laquelle tu vas définir la liste
            • Partager sur Facebook
            • Partager sur Twitter
            MSKD
              9 mai 2017 à 21:59:31

              Problème résolu, à l'aide des différents indications données par vous tous. Mon principale problème venait du fait que mes classes internes n'en étaient en fait pas, je les avaient déclarés en dehors de la classe sur laquelle je travaillais. Voilà la solution finale :
              package com.affichage;
              import java.awt.BorderLayout;
              import java.awt.Color;
              import java.awt.GridLayout;
              import java.awt.event.ActionEvent;
              import java.awt.event.ActionListener;
              import java.util.ArrayList;
              import java.util.List;
              
              import javax.swing.AbstractButton;
              import javax.swing.JButton;
              import javax.swing.JCheckBox;
              import javax.swing.JDialog;
              import javax.swing.JLabel;
              import javax.swing.JPanel;
              import javax.swing.JScrollPane;
              
              import com.machine.AdressesRSS;
              
              public class BoxSuppression extends JDialog {
              private JPanel container = new JPanel();
              private JLabel panTop = new JLabel("Cocher les sources que vous souhaiter supprimer.");
              private JPanel panMid = new JPanel();
              private JLabel vide = new JLabel("Il n'y à aucune sources enregistrées.");
              private JScrollPane scroll = new JScrollPane(panMid);
              private JPanel panBot = new JPanel();
              private JButton bouton = new JButton("Valider"); 
              private List<JCheckBox> listJCheckBox = new ArrayList();
              private AdressesRSS aRSS = new AdressesRSS();
              
              
              	
              	public BoxSuppression(){
              		this.setTitle("Suppression source(s) RSS");
              	    this.setSize(650, 470);
              	    this.setLocationRelativeTo(null);
              	    this.setResizable(false);
              	    this.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
              		init();
              		this.setContentPane(container);
              		this.setVisible(true);
              	}
              	
              	private void init(){
              		container.setLayout(new BorderLayout());
              		container.add(panTop, BorderLayout.NORTH);
              		panTop.setBackground(Color.GRAY);
              		panTop.setOpaque(true);
              		container.add(scroll, BorderLayout.CENTER);
              		panMid.setBackground(Color.LIGHT_GRAY);
              		constructionPanMid();
              		container.add(panBot, BorderLayout.SOUTH);
              		panBot.setBackground(Color.LIGHT_GRAY);
              		panBot.add(bouton);
              		bouton.addActionListener(new ButtonListener());
              	}
              	
              	private void constructionPanMid(){
              		if(aRSS.recuperer().length != 0){
              			panMid.setLayout(new GridLayout(aRSS.recuperer().length,1));
              			for(int i = 0; i < aRSS.recuperer().length; i++){
              				JCheckBox jcb = new JCheckBox("Source titre " + (i+1) + " - " + aRSS.recuperer()[i]);
              				this.listJCheckBox.add(jcb);
              				panMid.add(jcb);		
              			}
              		}
              		else {
              			panMid.add(vide);
              		}
              	}
              
              	class ButtonListener implements ActionListener{
              		public void actionPerformed(ActionEvent arg0) {
              			for(int i=0; i < aRSS.recuperer().length; i++){
              				if(listJCheckBox.get(i).isSelected() == true){
              					aRSS.supprimer(aRSS.recuperer()[i]);
              					System.out.println("Suppression de la source :" + aRSS.recuperer()[i]);
              				}
              			}
              			setVisible(false);
              		}
              	}
              
              }
              
              
              
              • Partager sur Facebook
              • Partager sur Twitter

              Utilisation JCheckBox

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown