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

Composants Java Discussion :

Récupérer le numero de mes checkbox


Sujet :

Composants Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut Récupérer le numero de mes checkbox
    Bonjour,
    Je suis un grand débutant
    Mon but est de faire une centaine de checkbox avec une question liée à chacune
    J'ai besoin de récupérer le numero des checkbox cochés par l'utilisateur
    exemple 1 3 14 84 etc pour ensuite traiter ces réponses selons leurs numeros
    Niveau gestionnaire d'evenement je n'ai aucun probleme
    j'ai essayé de multiple solutions ,chercher sur le web en vain
    Voici mon code
    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
    public class Fenetre extends JFrame  implements /*ItemListener,*/ActionListener{
     
    	 //private CaseAcocher check1 = new CaseAcocher();
    	 JCheckBoxLabel jcbl=new JCheckBoxLabel(1);
    	 boolean JC1 ;
    	 boolean JC2;
    	 private   JCheckBox check1 = new JCheckBox("1.question",JC1);  
    	 private   JCheckBox check2 = new JCheckBox("2.question",JC2);  
         public Fenetre() {
    	JFrame fenetre = new JFrame(); 
    	fenetre.setTitle("Ma première fenêtre Java");
        //Définit sa taille : 400 pixels de large et 100 pixels de haut
        fenetre.setSize(600, 400);
        //Nous demandons maintenant à notre objet de se positionner au centre
        fenetre.setLocationRelativeTo(null);
        //Termine le processus lorsqu'on clique sur la croix rouge
        fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Et enfin, la rendre visible        
     
        fenetre.setVisible(true);
        //Instanciation d'un objet JPanel
     
        //Container pan =new Container();
    	JLabel label = new JLabel("1. Vous souffrez ou avez souffert de dépression pendant au moins deux semaines."); 
        //label.setText("<html><font color = #012345 >le texte en couleur </font></html>");
    	label.setForeground(new Color(105,105,105));
    	//pan.setLayout(new BorderLayout());
     
        //fenetre.getContentPane().add(new JButton("my First JButton"));
     
     
    	/*pan.add(label,BorderLayout.NORTH);
    	pan.add(check1,BorderLayout.WEST); 
    	pan.add(check1,BorderLayout.NORTH); */
     
     
        //On crée un conteneur avec gestion verticale
        Box b = Box.createVerticalBox();
        b.add(label);
        b.add(check1);
        b.add(check2);
     
        fenetre.getContentPane().add(b);
        this.setVisible(true);
     
        //fenetre.getContentPane().add(pan);  
    	//fenetre.getContentPane().setBackground(Color.RED);
     
    	//fenetre.getContentPane().add(pan);
    	//check1.addItemListener(this);
        setVisible(true);
    	check1.addActionListener(this);
    	check2.addActionListener(this);
     
    	//pan.setVisible(true);
      }
     
      /*public void itemStateChanged(ItemEvent ie) {
        JCheckBox cb = (JCheckBox) ie.getItem();
        int state = ie.getStateChange();
    	String cbString=cb.paramString();
    	if(cb.isSelected()){
     
    	 System.out.println(cb.getText() + "ok"+cbString);	
     
     
    	}
        if (state == ItemEvent.SELECTED){
          System.out.println(cb.getText() + " selected");
        }else{
          System.out.println(cb.getText() + " cleared");
        }
    	*/
    	public void actionPerformed(ActionEvent e) {
     
    		String choice = e.getActionCommand();
    		System.out.println(e.choice );
     
     
        }
      }
    J’arrive à récupérer beaucoup de choses mais pas le numero, la position de la case a cocher parmi les autres cases à cocher
    Pour conclure là avec mes cases à cocher je voudrais que quand la 1ere case est coché ça me retourne 1 2 pour la 2ieme 55 pour la 55 ieme etc
    Merci pour 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,

    1. tu peux stocker les JCheckBox dans un tableau, l'index permettant d'avoir un numéro de checkbox
    2. Ce n'est pas vraiment fait pour ça, mais tu peux utiliser putClientProperty() et getClientProperty() pour annoter tes composants
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      JCheckbox checkbox = new JCheckbox("texte");
      checkbox.putClientProperty("checkbox.id","123");
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      if ( "123".equals(cb.getClientProperty("checkbox.id") ) {
             // c'est la checkbox 123
      }
    3. Tu peux faire une classe qui étend JCheckBox et qui lui ajouter un attribut qui te permet de la distinguer parmi les autres
    4. Tu peux utiliser une Map avec les JCheckBox en clef pour retrouver l'identifiant
    5. Tu peux gérer les checkbox via une JTable surtout si elles sont très nombreuses et variables, ce qui permet de gérer très facilement le lien avec un numéro (celui de la ligne)
    6. tu peux faire un modèle qui gère et éventuellement écoute tes checkbox, et tu ne passes plus par les composants pour en connaître l'état, mais uniquement par le modèle (et un contrôleur si tu veux gérer les composants). En encapsulant une ou plusieurs solutions citées ci-avant, tu peux cacher la complexité en ayant un accès facile à tes états, composants, etc.
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup vous m'avez donné pleins d'idées je teste tout ça

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut Probleme sur un map
    Bonjour,
    Comme indiqué plus haut j'essaye via un map de lier mes checkbox a un numéro
    Mon code
    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
    package bipolaireTest;
    import javax.swing.JFrame;
     
    import javax.swing.JPanel;
     
    import javax.swing.JButton;
     
    import java.awt.event.ActionListener;
     
    import java.awt.event.*;
     
    import java.awt.*;  
     
    import javax.swing.*;
    import java.util.Arrays ;
    import javax.swing.JCheckBox;
     
    import javax.swing.JLabel;
    import java.awt.Font;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import java.util.ArrayList;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.Map.Entry;
    public class JCheckBoxInit {
    	  private String  question;
    	  private int id ;
    	  private JCheckBox jcb;
    	  private ArrayList<JCheckBox> ListOfJCheckBox;
     
    	  private String[] questions={"Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activités et cela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue"};
     
     
    	  public JCheckBoxInit(){//super(questions[number]);
    		  for(int i=0;i<questions.length;i++){
    		  System.out.println(i);  
     
    		  this.question=questions[i];		 
    		  this.id=i;
    		  JCheckBox cb = new JCheckBox(question); 
    		  Map<Integer,JCheckBox> chb = new HashMap<Integer,JCheckBox>();
    		  chb.put(i,cb);
    		 /*ListOfJCheckBox= new ArrayList<JCheckBox>();
    		  jcb = new JCheckBox(question);  
    		  ListOfJCheckBox.add(i,jcb);*/
     
     
     
     
     
     
    		  }
    		  for(int cle:chb.keySet()) {
     
     
    			  System.out.println("-"+cle); 
     
     
     
    		  }
    		  }
     
    	  }
    Quand je test et tente via une boucle d'afficher le contenu de mon map j'ai un Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    chb cannot be resolved
    Je ne comprends pas mon code est pourtant trés simple merci pour votre aide

  5. #5
    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 laurentg2017 Voir le message
    chb cannot be resolved
    Cela veut dire que la variable chb n'existe pas dans la portée où on l'utilise.

    Avec une bonne indendation, on voit tout de suite le problème :

    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
    		for (int i = 0; i < questions.length; i++) {
    			System.out.println(i);
     
    			this.question = questions[i];
    			this.id = i;
    			JCheckBox cb = new JCheckBox(question);
    			Map<Integer, JCheckBox> chb = new HashMap<Integer, JCheckBox>();
    			chb.put(i, cb);
    			/*
    			 * ListOfJCheckBox= new ArrayList<JCheckBox>(); jcb = new JCheckBox(question);
    			 * ListOfJCheckBox.add(i,jcb);
    			 */
     
    		}
    		for (int cle : chb.keySet()) {
     
    			System.out.println("-" + cle);
     
    		}
    La variable chb est créée dans le bloc de la première boucle for. Elle ne peut donc exister dans le bloc de la seconde boucle for.

    Créer la Map dans la boucle for n'a aucun intérêt : tu ne peux y associer qu'une JCheckBox avec un seul numéro et après, quand ça passe à l'itération suivante, la map est perdue, donc l'association aussi. Ton code pourrait compiler et la map être correctement remplie si tu sortais la déclaration (et l'initialisation) de la variable hors de la boucle :

    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
    public JCheckBoxInit() {// super(questions[number]);
    	Map<Integer, JCheckBox> chb = new HashMap<Integer, JCheckBox>();
    	for (int i = 0; i < questions.length; i++) {
    		System.out.println(i);
     
    		this.question = questions[i];
    		this.id = i;
    		JCheckBox cb = new JCheckBox(question);
    		chb.put(i, cb);
    		/*
    		 * ListOfJCheckBox= new ArrayList<JCheckBox>(); jcb = new JCheckBox(question);
    		 * ListOfJCheckBox.add(i,jcb);
    		 */
     
    	}
    	for (int cle : chb.keySet()) {
     
    		System.out.println("-" + cle);
     
    	}
    }
    Mais ça ne servirait à rien pour ce que tu cherches à faire, parce que la variable ne serait pas accessible hors du constructeur et la map n'existerait plus après la construction de l'objet. Il faut plutôt faire comme ça, par exemple :

    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
    import java.util.AbstractList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
     
    import javax.swing.JCheckBox;
     
    public class JCheckBoxMap implements Iterable<JCheckBox> {
     
    	private final Map<Integer, JCheckBox> map;
    	private final List<JCheckBox> list;
     
    	public JCheckBoxMap(String...questions) {
    		map = new TreeMap<>();
    		for(int i=0; i<questions.length; i++) {
    			map.put(i, new JCheckBox(questions[i]));
    		}
    		list = new AbstractList<JCheckBox>() {
     
    			@Override
    			public JCheckBox get(int index) {
    				if ( index<0 || index>=size() ) {
    					throw new IndexOutOfBoundsException("Index " +index + " is out of bounds [0,"+size()+"[");
    				}
    				return map.get(index);
    			}
     
    			@Override
    			public int size() {
    				return map.size();
    			}
    		};
    	}
     
    	public int count() {
    		return map.size();
    	}
     
    	public int size() {
    		return map.size();
    	}
     
    	public JCheckBox getCheckBox(int index) {
    		return map.get(index);
    	}
     
    	public boolean isSelected(int index) {
    		return getCheckBox(index).isSelected();
    	}
     
    	public void setSelected(int index, boolean selected) {
    		getCheckBox(index).setSelected(selected);
    	}
     
    	public String getQuestion(int index) {
    		return getCheckBox(index).getText();
    	}
     
    	@Override
    	public Iterator<JCheckBox> iterator() {
    		return map.values().iterator();
    	} 
     
    	public List<JCheckBox> asList() {
    		return Collections.unmodifiableList(list);
    	}
     
    	public Set<Map.Entry<Integer,JCheckBox>> asSet() {
    		return Collections.unmodifiableSet(map.entrySet());
    	}
     
    }
    Du coup tu as juste à faire :

    Pour la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JCheckBoxMap checkboxes;
    Pour l'initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkboxes = new JCheckBoxMap("Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activités et cela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue");
    Pour traiter une checkbox par son numéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panel.add(checkboxes.getCheckBox(2));
    Traitement par for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0; i<checkboxes.size(); i++) {
       panel.add(checkboxes.getCheckBox(i));
    }
    par forEach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(JCheckBox : checkboxes) {
       panel.add(checkboxes);
    }
    si tu as besoin d'une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<JCheckBox> liste = checkboxes.asList();
    de traiter les checkbox avec leur numéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(Map.Entry<Integer,JCheckBox> checkbox : checkboxes.asSet()) {
       checkbox.getValue().addActionPerformed(e-> System.out.println("checkbox numéro "+ checkbox.getKey() +" : " + (checkbox.getValue().isSelected()?"":"pas") + " cochée" ));
    }
    etc...
    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.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup pour votre aide je venais de voir effectivement que mon chekbox était écrasé dans le map a chaque itération et que size valait toujours un et que dans un autre for ma map n'était plus visible
    merci pour votre solution ça va me permettre de comprendre mieux le fonctionnement de java je viens de JavaScript et il n'est pas évident de changer de paradigme

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Bonjour
    Quand je créé un objet de la classe JCheckBoxMap j'obtient un Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Syntax error on token ";", , expected

    at bipolaireTest.Fenetre.<init>(Fenetre.java:43)
    at bipolaireTest.run.main(run.java:16)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private JCheckBoxMap checkboxes;
    	 checkboxes = new JCheckBoxMap("Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activités et cela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue");
    J'ai beau chercher je ne trouve aucun ; manquant
    De plus i y a une chose que je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public JCheckBoxMap(String...questions) {
    On attend pas un tableau en parametre
    ?
    Merci pour votre aide

  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 laurentg2017 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private JCheckBoxMap checkboxes;
    	 checkboxes = new JCheckBoxMap("Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activités et cela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue");
    J'ai beau chercher je ne trouve aucun ; manquant
    En fait, le compilateur essaye d'interpréter l'erreur tant bien que mal selon le code. Parfois, on la bonne erreur, parfois non. Ici, le parsing ne permet pas au compilateur de se rendre compte du problème.

    Comme je n'ai pas tout le code, je suis un peu comme le compilateur, en un peu plus intelligent, donc j'interprète :

    1. puis que tu as déclaré checkboxes en private, je suppose que c'est un attribut de classe.
    2. si la ligne de code qui commence par checkboxes = new JCheckBoxMap(" est vraiment juste après la déclaration dans ton code, cela veut dire qu'elle est dans le corps de la classe. On ne peut pas mettre d'instruction dans le corps de la classe, sauf en tant qu'expression d'affectation. Ce code doit être dans un constructeur, une méthode, un bloc de classe éventuellement, ou en expression d'affectation.


    Tous ces cas fonctionnent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Machin {
    private JCheckBoxMap checkboxes=new JCheckBoxMap("a","b","c");
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Machin {
    private JCheckBoxMap checkboxes;
     
       public Machin() {
         checkboxes=new JCheckBoxMap("a","b","c");
      }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Machin {
    private JCheckBoxMap checkboxes;
     
       public Machin() {
         init();
      }
      private void init() {
           checkboxes=new JCheckBoxMap("a","b","c");
      }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Machin {
    private JCheckBoxMap checkboxes;
     
       public Machin() {
         checkboxes=initCheckBoxes();
      }
      private JCheckBoxMap init() {
           return new JCheckBoxMap("a","b","c");
      }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Machin {
    private JCheckBoxMap checkboxes;
     
    {
         checkboxes=new JCheckBoxMap("a","b","c");
     
    }
     
       public Machin() {
      }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Machin {
    private JCheckBoxMap checkboxes = createCheckBoxes();
     
       public Machin() { 
      }
      private static JCheckBoxMap createCheckBoxes() {
           return new JCheckBoxMap("a","b","c");
      }
     
    }
    Citation Envoyé par laurentg2017 Voir le message
    De plus i y a une chose que je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public JCheckBoxMap(String...questions) {
    On attend pas un tableau en parametre
    ?
    Les trois petits points définissent ce qu'on appelle un varargs. Un argument dont le nombre est variable. Donc on peut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JCheckBoxMap("Q1");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JCheckBoxMap("Q1","Q2);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JCheckBoxMap("Q1","Q2","Q3");
    etc.
    et même
    Côté traitement, Java permet de traiter les valeurs passées en paramètres via un tableau. Donc on peut aussi passer un tableau en paramètre.
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Effectivement j'ai mis la construction de l'objet en variable d'objet dans ma classe fenetre
    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
    public class Fenetre extends JFrame  implements /*ItemListener,*/ActionListener{
     
    	 //private CaseAcocher check1 = new CaseAcocher();
    	// JCheckBoxLabel jcbl=new JCheckBoxLabel(1);
    	 boolean JC1 ;
    	 boolean JC2;
    	 private JCheckBoxMap checkboxes;
    	 checkboxes = new JCheckBoxMap("Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activités et cela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue");             
    	 private   JCheckBox check2 = new JCheckBox("2.question",JC2);  
        public Fenetre() {
    	JFrame fenetre = new JFrame(); 
    	fenetre.setTitle("Ma première fenêtre Java");
       //Définit sa taille : 400 pixels de large et 100 pixels de haut
       fenetre.setSize(600, 400);
       //Nous demandons maintenant à notre objet de se positionner au centre
       fenetre.setLocationRelativeTo(null);
       //Termine le processus lorsqu'on clique sur la croix rouge
       fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       //Et enfin, la rendre visible        
     
       fenetre.setVisible(true);
       //Instanciation d'un objet JPanel
     
       //Container pan =new Container();
    	JLabel label = new JLabel("1. Vous souffrez ou avez souffert de dépression pendant au moins deux semaines."); 
       //label.setText("<html><font color = #012345 >le texte en couleur </font></html>");
    	label.setForeground(new Color(105,105,105));
    	//pan.setLayout(new BorderLayout());
     
       //fenetre.getContentPane().add(new JButton("my First JButton"));
     
     
    	/*pan.add(label,BorderLayout.NORTH);
    	pan.add(check1,BorderLayout.WEST); 
    	pan.add(check1,BorderLayout.NORTH); */
     
     
       //On crée un conteneur avec gestion verticale
       Box b = Box.createVerticalBox();
       b.add(label);
      // b.add(check1);
       b.add(check2);
     
       fenetre.getContentPane().add(b);
       this.setVisible(true);
     
       //fenetre.getContentPane().add(pan);  
    	//fenetre.getContentPane().setBackground(Color.RED);
     
    	//fenetre.getContentPane().add(pan);
    	//check1.addItemListener(this);
       setVisible(true);
    	//check1.addActionListener(this);
    	check2.addActionListener(this);
     
    	//pan.setVisible(true);
     }
     
     /*public void itemStateChanged(ItemEvent ie) {
       JCheckBox cb = (JCheckBox) ie.getItem();
       int state = ie.getStateChange();
    	String cbString=cb.paramString();
    	if(cb.isSelected()){
     
    	 System.out.println(cb.getText() + "ok"+cbString);	
     
     
    	}
       if (state == ItemEvent.SELECTED){
         System.out.println(cb.getText() + " selected");
       }else{
         System.out.println(cb.getText() + " cleared");
       }
    	*/
    	public void actionPerformed(ActionEvent e) {
     
    		String choice = e.getActionCommand();
    		System.out.println(e.getModifiers());
     
     
       }
     }
    Edit les méthodes de JCheckBoxMap sont des méthodes à redefinir de l'Interface Iterable<T> ou est ce des methodes de votre crue?
    Je trouve peu de documentation sur les interfaces utilisées Merci

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Bonjour Merci pour votre aide
    Le probleme de checkbox est donc résolu
    aprés j'ai un probbleme pour rajouter ces checkbox a mes box
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void JCheckBoxAdd() {
    	   private box b[4]; 
    	   checkboxes = new JCheckBoxMap("Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activitésela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue"); 
    	    //System.out.println(checkboxes.getClass().getName());
    	    for(int i=0 ;i<checkboxes.count();i++) {
    	    	System.out.println(checkboxes.getCheckBox(i).getText());
    	    	b[i] = Box.createVerticalBox();
    	    	b[i].add(checkboxes.getCheckBox(i));
    	    	// this.b[i] = Box.createVerticalBox();
    	    	b[i].add(label);
     
    	 }
    j'ai pour message d'erreur Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    b cannot be resolved to a variable
    box cannot be resolved to a type
    Illegal modifier for parameter b; only final is permitted
    Syntax error on token "4", delete this token
    label cannot be resolved to a variable

    at bipolaireTest.Fenetre.<init>(Fenetre.java:80)
    at bipolaireTest.run.main(run.java:16)
    Ce que je comprends comme ceci B est introuvable mon tableau est faux
    et surtout ce que j'essaye de faire dans ma boucle est interdit en java
    Dois je faire une classe comme la votre pour fournir les box
    Je pense deja que je vais devoir faire une classe pour les label comme la votre pour fournir tout les X checkbox un label
    Merci pour votre aide

  11. #11
    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
    On ne peut pas créer une variable privée dans une méthode ou un constructeur. De manière générale, on ne met pas de portée de variable dans une déclaration de variable locale, parce qu'elle est locale et c'est tout.
    Par ailleurs, la classe box n'existe pas : c'est la classe javax.swing.Box, probablement.

    Tu n'as pas besoin de créer un tableau d'ailleurs. En plus, tu crées un tableau de 4 élements, alors qu'il y a 5 checkbox. Tu aurais forcément une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i=0 ;i<checkboxes.count();i++) {
       Box box = Box.createVerticalBox();
    }
    La variable label n'est pas déclarée non plus (il y a un message d'erreur qu'il le dit).

    Ensuite, à quoi ça sert de créer des Box pour ne pas les ajouter à un conteneur (genre JPanel) ? A quoi _a sert de créer des JLabel à partir de textes de checkbox ? Si tu as besoin de JLabel tu les crées directement avec le texte, sinon tu mets les checkbox dans les Box. Par ailleurs, un Box à un seul composant n'a que peu d'intérêt.

    Citation Envoyé par laurentg2017 Voir le message
    Ce que je comprends comme ceci B est introuvable mon tableau est faux
    C'est quoi B ? Quel tableau ? Que veux dire "tableau est faux" ?

    Citation Envoyé par laurentg2017 Voir le message
    et surtout ce que j'essaye de faire dans ma boucle est interdit en java
    C'est à dire ?

    Citation Envoyé par laurentg2017 Voir le message
    Dois je faire une classe comme la votre pour fournir les box
    Citation Envoyé par laurentg2017 Voir le message
    Je pense deja que je vais devoir faire une classe pour les label comme la votre pour fournir tout les X checkbox un label
    Il sert à quoi ce label au juste ? Un JCheckBox dispose de son propre texte.

    Un exemple complet de dialogue :
    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.event.ActionListener;
     
    import javax.swing.BorderFactory;
    import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class DialogQuestions extends JDialog {
     
    	private JCheckBoxMap cbmap;
    	private boolean approved; // signifie qu'on a valider et pas annuler
     
    	private DialogQuestions(boolean single, String...questions) {
    		super((Frame)null,"Démo",true); // le true, c'est pour que le dialogue soit modale (donc bloquant)
    		if ( questions.length==0 ) {
    			throw new IllegalArgumentException();
    		}
     
    		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
     
    		// on utilise un panneau intermédiaire pour l'affichage du dialogue
    		JPanel panel = new JPanel(new BorderLayout());
    		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
     
    		// on créé la checkboxmap avec les questions
    		cbmap = new JCheckBoxMap(questions);
    		// on les places dans une Box verticale
    		Box box = Box.createVerticalBox();
    		for (JCheckBox cb : cbmap) {
    			box.add(cb);
    		}
    		panel.add(box);
     
    		ActionListener actionListener = e -> {
    			approved = true;
    			dispose();
    		};
     
    		JLabel label; // pour afficher un texte explicatif (ou ce qu'on veut) en haut du dialogue
    		if (single) {
    			label = new JLabel("Cocher la case que vous voulez. Vous n'avez le droit qu'à une seule réponse.");
    			// dès qu'on clique une checkbox le dialog se ferme
    			for (JCheckBox cb : cbmap) {
    				cb.addActionListener(actionListener);
    			}
    		} else {
    			label = new JLabel("Cocher les cases que vous voulez et cliquer sur \"Valider\". Vous avez le droit à plusieurs réponses.");
    			JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    			// bouton de validation des choix
    			JButton button = new JButton("Valider");
    			button.addActionListener(actionListener);
    			ActionListener buttonEnabledManagement = e-> {
    				button.setEnabled(cbmap.asList().stream().anyMatch(JCheckBox::isSelected));
    			};
    			for (JCheckBox cb : cbmap) {
    				cb.addActionListener(buttonEnabledManagement);
    			}
    			buttonPanel.add(button);
    			button.setEnabled(false);
    			panel.add(buttonPanel, BorderLayout.SOUTH);
    		}
    		label.setBackground(Color.WHITE);
    		label.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0));
    		panel.add(label, BorderLayout.NORTH);
     
    		getContentPane().add(panel);
     
    	}
     
     
    	private void showDialogAtCenter() {
    		pack();
    		setLocationRelativeTo(getParent());
    		setVisible(true);		
    	}
     
    	/**
             * Affiche un dialogue qui permet de choisir plusieurs réponses
             * @param questions
             * @return
             */
    	public static int[] showDialogQuestions(String... questions) {
     
    		DialogQuestions dialog = new DialogQuestions(false, questions);
    		dialog.showDialogAtCenter();
    		if (dialog.approved) {
    			return dialog.cbmap.asSet().stream()
    			.filter(e-> e.getValue().isSelected())
    			.mapToInt(e->e.getKey())
    			.toArray();
    		} else {
    			return new int[0];
    		}
     
    	}
     
    	/**
             * Affiche un dialogue qui permet de ne choisir qu'une seule réponse
             * @return -1 si pas de réponse
             */
    	public static int showSingleResponseDialogQuestions(String... questions) {
     
    		DialogQuestions dialog = new DialogQuestions(true, questions);
    		dialog.showDialogAtCenter();
    		if (dialog.approved) {
    			return dialog.cbmap.asSet().stream()
    			.filter(e-> e.getValue().isSelected())
    			.mapToInt(e->e.getKey())
    			.findAny()
    			.orElse(-1);
    		} else {
    			return -1;
    		}
     
    	}
     
    	public static void main(String[] args) {
     
    		String[] questions = { "q1", "q2", "q3" };
    		int[] checked = DialogQuestions.showDialogQuestions(questions);
    		if (checked.length == 0) {
    			System.out.println("Dialogue annulé");
    		} else {
    			System.out.println("Les cases qui ont été cochées sont : ");
    			for (int i : checked) {
    				System.out.println(i + " " + questions[i]);
    			}
    		}
     
    		int singlechecked = DialogQuestions.showSingleResponseDialogQuestions(questions);
    		if (singlechecked == -1) {
    			System.out.println("Dialogue annulé");
    		} else {
    			System.out.println("La cases qui ont été cochée est : ");
    			System.out.println(singlechecked + " " + questions[singlechecked]);
    		}
     
    	}
     
    }
    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.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Merci pour votre réponse rapide
    Je vais étudier votre code
    le probleme venant de javascript je n'ai pas encore en tête la logique de Java et java est terriblement dur à coté

    Merci

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Bonjour
    J'ai bien étudier votre code qui m servira je pense pour savoir si une case est cochée ou non voir annulée
    Je pense que mieux est de vous montrer ce que je veux comme résultat final
    https://www.psy-en-ligne.pro/test-bi...-bipolaire.php
    C'est un script que j'ai fais fais en php et que je souhaite réaliser en Java
    De mon coté j'ai fait un petit bout de code pour ajouter mes checkboxs à mes box
    Le code
    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
    package bipolaireTest;
     
    import java.util.Iterator;
    import javax.swing.Box;
    import java.util.ArrayList;
    public class BoxAdd {
    	private ArrayList<Box>ListOfBox;
        public BoxAdd(int nBBox) {
        this.ListOfBox= new ArrayList<Box>();
           // Box[] b=new Box[5];
              Box b;
    	    //System.out.println(checkboxes.getClass().getName());
    	    for(int i=0 ;i<nBBox;++i) {
     
    	    	//b[i] = Box.createVerticalBox();
    	    	 b =Box.createVerticalBox();
        	//this.ListOfBox.add(i,b[i]);
    	    	 this.ListOfBox.add(i,b);
        	// System.out.println(b.getClass().getName()+"/"+i);
    	    }
    	    /*System.out.println("The list is: \n"
                    + this.ListOfBox.size());  */
        }
        public ArrayList getBoxAdd() {
     
     
     
        	 return this.ListOfBox;
     
     
     
     
     
        }
     
     
    }
    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 void JCheckBoxAdd() {
     
    	   checkboxes = new JCheckBoxMap("Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activitésela quotidiénement","Variation de l'appétit, de moins important à plus important","Problème de sommeil","Fatigue"); 
     
    	    	BoxAdd Ba=new BoxAdd(checkboxes.count());
    	        Ba.getBoxAdd();
    	        for(int i=0;i<Ba.getBoxAdd().size();++i) {
    	        	System.out.println(Ba.getBoxAdd().get(i));
    	        	System.out.println(checkboxes.getCheckBox(i));
    	        	//System.out.println(checkboxes.getCheckBox(i));	
    	        Ba.getBoxAdd().get(i).add(checkboxes.getCheckBox(i));	
    	        this.fenetre.getContentPane().add(Ba.getBoxAdd().get(i));
    	        }
     
     
     
     
       }
    Le message d'ereur est The method add(JCheckBox) is undefined for the type Object
    The method add(Component) in the type Container is not applicable for the arguments (Object)

    j'ai fais des recherches le message d’erreur dit que l'ajout d'une checkbox a mes box est impossible
    Pourtant c'est tout à fait possible
    Merci pour votre aide

  14. #14
    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 laurentg2017 Voir le message
    Le message d'ereur est The method add(JCheckBox) is undefined for the type Object
    The method add(Component) in the type Container is not applicable for the arguments (Object)
    C'est parce que getBoxAdd() retourne une ArrayList et pas une ArrayList<Box>.

    Mais pourquoi tu continues à vouloir créer une Box par JCheckBox. C'est absurde ! En plus tu ajoute les Box au contentpane par défault, qui en BorderLayout. Si tu n'as pas changé le layout, toutes les Box vont aller au même endroit (au centre) et donc il n'y aura que la dernière affichée.
    Utilise une seule Box ! Regarde ce que je t'ai donnée comme code et tu verras que ça fait exactement ce que tu montres dans ton site web (simplement la construction du contenu du dialogue correspond à chaque section de checkbox dans ton site), donc tu peux le transpose dans une classe qui gère une section.

    Exemple :
    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.BorderFactory;
    import javax.swing.JCheckBox;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
     
    public class SectionPanel extends JPanel {
     
    	private int n;
    	private JCheckBoxMap checkboxmap;
    	private String titre;
     
    	public SectionPanel(int n, String titre, String...questions) {
    		super(new BorderLayout());
    		this.n=n;
    		this.titre=titre;
    		this.checkboxmap = new JCheckBoxMap(questions);
    		JTextArea titrearea = new JTextArea(n+". "+titre);
    		titrearea.setForeground(Color.WHITE);
    		titrearea.setBackground(Color.decode("#0596de"));
    		titrearea.setEditable(false);
    		titrearea.setLineWrap(true);
    		titrearea.setWrapStyleWord(true);
    		titrearea.setBorder(BorderFactory.createEmptyBorder(3,3,3,3));
    		add(titrearea,BorderLayout.NORTH);
    		//Box box = Box.createVerticalBox();
    		JPanel box = new JPanel(new GridBagLayout());
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.gridx = 0;
    		gbc.weightx=1;
    		gbc.fill = GridBagConstraints.HORIZONTAL;
    		gbc.anchor = GridBagConstraints.WEST;
    		box.setBackground(Color.decode("#e9f8fe"));
    		for(JCheckBox jcheckbox : checkboxmap) {
    			jcheckbox.setOpaque(false);
    			box.add(jcheckbox,gbc);
    		}
    		add(box); // au centre
    	}
     
    	public int getNumero() {
    		return n;
    	}
     
    	public String getTitre() {
    		return titre;
    	}
     
    	public int[] getSelected() {
    		return checkboxmap.asSet().stream()
    		.filter(e-> e.getValue().isSelected())
    		.mapToInt(e->e.getKey())
    		.toArray();
    	}
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel(new GridBagLayout());
    		frame.getContentPane().add(new JScrollPane(panel,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
    		List<SectionPanel> sectionPanels = new ArrayList<>();
    		sectionPanels.add(new SectionPanel(1, " Vous souffrez ou avez souffert de dépression pendant au moins deux semaines.", "Une tristesse presque quotidienne, souvent toute la journée","Pas ou peu d'interêt pour quasiment toutes les activités et cela quotidiénement","Variation de l'appétit, de moins important à plus important"));
    		sectionPanels.add(new SectionPanel(2, "Vous vivez ou avez vécu un épisode d’excitation pendant au moins 15 jours :hyperactivité et euphorie,multiples projets,discours volubiles,comportement à risque,exaltation etc.", "q1","q2"));
    		sectionPanels.add(new SectionPanel(3, "titre3", "q1","q2","q3","q4"));
     
    		GridBagConstraints gbc = new GridBagConstraints();
    		gbc.gridx = 0;
    		gbc.weightx = 1;
    		gbc.fill = GridBagConstraints.HORIZONTAL;
     
    		for(SectionPanel sectionPanel : sectionPanels) {
    			panel.add(sectionPanel,gbc);
    		}
     
    		frame.pack();;
    		frame.setSize(800,frame.getHeight()+22);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    }
    Est-ce que le but est d'avoir une application sans être connecté à Internet ? Si tu veux juste afficher ton application PHP dans une application Java avec connexion Internet, tu n'auras pas à redévelopper tout en utilisant simplement une WebView JavaFX qui est comme un navigateur intégré dans une application Java.
    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.

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Bonjour
    Merci pour votre aide je vais donc utiliser qu'une seule box
    Je pourrais utiliser une webview ou phoneGap mais mon but est d'apprendre java
    je test le code et je reviens vers vous

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Bonjour
    Merci beaucoup pour votre code le rendu est comme mon site web
    J'ai étudié le code et super(new BorderLayout()) me pose probleme
    super c'est le constructeur de JPanel qui est appelé et on lui passe un borderlayout pour la mise en forme en paramètre
    Si on fait appel au constructeur de la super classe c'est je pense pour pouvoir heriter de ses méthodes
    Mais il y a t'il un mécanisme permettant de récupérer l'objet créé grâce à super() ?
    En ce qui concerne javaFX n'est ce pas mieux d'apprendre cette api récente plutôt que swing?
    Merci

  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 laurentg2017 Voir le message
    super c'est le constructeur de JPanel qui est appelé et on lui passe un borderlayout pour la mise en forme en paramètre
    Si on fait appel au constructeur de la super classe c'est je pense pour pouvoir heriter de ses méthodes
    Non c'est extends JPanel qui fait ça. L'appel de super, c'est juste pour invoquer un constructeur de la super class, ici un constructeur qui prend un LayoutManager en paramètre.
    Citation Envoyé par laurentg2017 Voir le message
    Mais il y a t'il un mécanisme permettant de récupérer l'objet créé grâce à super() ?
    Mmm, l'objet créé lors de l'invocation du super() c'est lui-même.

    Lorsqu'une classe B étend une autre A, lorsqu'on créé une instance de B, un constructeur de A est forcément appelé, même si on ne voit nulle part super() écrit. Forcément, si B hérite de A, elle hérite des méthodes et attributs, et donc il faut construire A pour pouvoir construire B. Une classe ne pouvant être construite que si un des ses constructeurs est appelés, construire une instance de B implique l'invocation de constructeur de A. Cette invocation peut être implicite, lorsque le constructeur dans argument existe.

    Citation Envoyé par laurentg2017 Voir le message
    En ce qui concerne javaFX n'est ce pas mieux d'apprendre cette api récente plutôt que swing?
    Swing permet d'apprendre aussi bien que JavaFX. Cela dépend de ce que tu cherches au juste : apprendre Java pour apprendre Java, ou pour faire des applications Desktop, ou encore pouvoir postuler à une offre d'emploi. On voit ici ou là des arguments du genre Swing c'est dépassé, pas beau, ou plus maintenu. Pour le premier argument, je dirais que si on pousse l'argumentation au bout, alors les applications desktops sont dépassées, tout se passe sur le cloud maintenant, donc vaut mieux apprendre à faire du web avec microservices. C'est comme si on disait qu'il ne pouvait plus apprendre à conduire sur une deudeuche : après tout, y'a un volant, un moteur, un accélarateur, un frein et une boite de vitesse, ça suffit bien pour apprendre à conduire, au moins la base. Pour le second argument, on peut très bien, avec un peu de travail faire des applications aussi jolies que sous JavaFX (pour beaucoup, il serait même difficile de faire la différence à l'oeil nu). Et pour le troisième, on s'en fout un peu, non ? C'est stable depuis des années. Il y a peut-être un ou deux bugs ici ou là, mais ce n'est bloquant en général. Après, il y a peut-être pas le dernier composant super à la mode comme sur le web, avec du morphing de malade, mais si c'est pour apprendre, on s'en fout. La base, c'est comprendre les layouts, le threading propre aux GUI, les événements et les systèmes observables/observers, les séparations vue/modèle et le binding, etc, en bref les concepts. Des trucs qu'on retrouve aussi bien en Swing qu'en JavaFX, ou qu'en SWT. On trouve même des équivalents plus ou moins quand on fait de l'appli web.
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Merci pour vos réflexions constructives
    A la base je suis un développeur web php un peu de nodeJS javascript jquerry mais j'ai toujours eu envi d'apprendre un "vrai" langage
    En php et JS on peut faire du code assez dégueulasse qui fonctionne
    J'ai hésité entre C++ et Java
    mon but est de faire un jour des applis natives pour Android
    Mais je me suis dit qu'avant je devais vraiment maitriser java
    et faire des logiciels avec swing pour rejoindre vos propos offrent ue bonne base d’apprentissage
    On trouve des infos partout des gens comme vous pour aider
    J'ai trouvé aucun livre en Français sur javaFx
    Merci pour votre aide et vos précieux conseils et de vos retours expériences trés intéressants

  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 laurentg2017 Voir le message
    A la base je suis un développeur web php un peu de nodeJS javascript jquerry mais j'ai toujours eu envi d'apprendre un "vrai" langage
    En php et JS on peut faire du code assez dégueulasse qui fonctionne
    Même si je suis loin d'être fan de JavaScript, et encore moins de PHP, je considère que ce sont de vrais langages de programmation, qui reposent sur des concepts particuliers très intéressants (du moins pour JavaScript). Ils sont juste plus permissifs peut-être, donc sanctionne moins certaines libertés avec la structure du code.
    Par ailleurs, on peut aussi écrire du code Java dégueulasse qui fonctionne, voire du code propre qui fonctionne mais avec des fuites mémoires ou avec une consommation exagérée de ressources. En C++, on doit être plus rigoureux, au moins pour éviter les accès illégaux aux pages mémoires.
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Perso j'aime beaucoup javascript qui est au fond un langage assez étrange mais trés puissant pour le web
    mais je pense que pour apprendre la prog java est trés bien il oblige à de la rigueur
    j'ai appris la prog avec php et j'en vois les lacunes
    sinon que signifie l'instruction Pack() et @Override visiblement ça indique que la méthode est redéfinie et que si on fait appel a cette méthode redéfinie il sera appelé la méthode de la classe fille ?

    Merci pour votre aide et votre retour d'expérience

Discussions similaires

  1. Récupérer les valeurs de mes checkbox créées dynamiquement
    Par new_dreams dans le forum Composants
    Réponses: 2
    Dernier message: 28/03/2013, 23h41
  2. [MySQL] récupérer valeurs de mes checkbox créé dynamiquement
    Par bullrot dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/06/2010, 10h33
  3. récupérer la valeur d'une checkbox
    Par druglord dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/08/2005, 13h54
  4. Réponses: 8
    Dernier message: 13/04/2005, 15h40
  5. Réponses: 7
    Dernier message: 27/03/2005, 10h34

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