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 :

Problème virgule et choix avec JOptionPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut Problème virgule et choix avec JOptionPane
    Bonsoir à tous,

    Je souhaiterais créer un espace graphique à mon programme, j'ai plus ou moins bricolé mon code pour avoir le résultat et saisir dans des fenêtres mais il me manque l'option "homme ou femme" et en plus ça change de fenêtre à chaque fois, pour finir impossible par exemple de mettre 1,75 ou 1.75 au moment d'entrer sa taille... (je pense que ça vient de "Integer" ??

    Comme d'hab j'essais de faire avec mes livre et ma tête avant de venir vous embêter..

    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
    import javax.swing.JOptionPane;
    import javax.swing.*;
    import java.util.Scanner;
    import static java.lang.System.in;
    import static java.lang.System.out;
    import java.math.*;
    import java.text.*;
     
     
     
    class MetaBase {
    	public static void main(String[] args) {
    		Scanner calc = new Scanner(System.in);
     
    		JFrame frame = new JFrame("Your Config");
    		frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
    		double num0; //Poids
    		double num1; //Taille
    		double num2; //Age
    		double num3 = 13.7516;  //Calcul homme
    		double num4 = 500.33;   //Calcul homme
    		double num5 = 6.7550;   //Calcul homme
    		double num6 = 66.473;   //Calcul homme
    		double num7 = 9.5634;     //Calcul femme
    		double num8 = 184.96;     //Calcul femme
    		double num9 = 4.6756;     //Calcul femme
    		double num10 = 655.0955;  //Calcul femme
    		double ans1;//Homme
    		double ans2;//Femme
    		double coef1;//Coefficient
     
    		JOptionPane.showMessageDialog(
    				null, "Ce programme permet de calculer les Kcalories nécessaire par rapport à votre activité.","MetaBase",JOptionPane.INFORMATION_MESSAGE);
     
    		num0 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre Poids:"));
    		num1 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre Taille"));
    		num2 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre Age:"));
    		coef1 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre coefficient d'activité, Sédentaire = 1,37 Légère 1.56 Modéré = 1,64 Intense 1,82"));
     
     
    		/*System.out.println("Entrer votre Poids:");   //*num3
    		num0 = calc.nextDouble();
     
    		System.out.println("Entrer votre Taille:");  //*num4
    		num1 = calc.nextDouble();
     
    		System.out.println("Entrer votre Age:");      //*num5
    		num2 = calc.nextDouble();
     
    		System.out.println("Entrer votre coefficient d'activité (Sédentaire = 1,37 Légère 1.56 Modéré = 1,64 Intense 1,82)");
    		coef1 = calc.nextDouble();*/
     
    		java.text.DecimalFormat df = new java.text.DecimalFormat("0");
     
     
    		ans1 = (num3 * num0) + (num4 * num1) - (num5 * num2) + num6;   //Résultat homme
     
            ans2 = (num7 * num0) + (num8 * num1) - (num9 * num2) + num10;  //Résultat femme
     
     
     
    		//out.print("Homme ou Femme ?");
    		String genre = calc.next();
    		switch(genre.toLowerCase()){
    			case "homme":
    			JLabel label = new JLabel("Votre apport idéal est de:" +df.format (ans1*coef1) + "Kcal");
    			frame.add(label);
    			frame.pack();
    			frame.setVisible(true);
    			//System.out.println("Votre apport idéal est de:" +df.format (ans1*coef1) + "Kcal"); //Homme
    				break;
    			case "femme":
    			JLabel label1 = new JLabel("Votre apport idéal est de:" +df.format (ans2*coef1) + "Kcal");
    			frame.add(label1);
    			frame.pack();
    			frame.setVisible(true);
     
    			    //System.out.println("Votre apport idéal est de:" +df.format (ans2*coef1) + "Kcal"); //Femme
    				break;
    			default:
     
     
     
    		} 
     
    		}
     
    }
    Merci pour vos lumières,

    Seb

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord, au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coef1 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre coefficient d'activité, Sédentaire = 1,37 Légère 1.56 Modéré = 1,64 Intense 1,82"));
    Tu aurais pu écrire :
    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
    Object saisieCoef = JOptionPane.showInputDialog(null, "Entrer votre coefficient d'activité", 
                                                                                       "Entrée", 
                                                                                       JOptionPane.QUESTION_MESSAGE,
                                                                                       null,
    				                                                   new String[]{"Sédentaire","Légère","Modéré","Intense"},
    				                                                   null);
    		double coef1;
    		if ( saisieCoef!=null) {
    		switch(saisieCoef.toString()) {
    		case "Sédentaire":
    			coef1 = 1.37;
    			break;
    		case "Légère":
    			coef1 =  1.56;
    			break;
    		case "Modéré":
    			coef1  = 1.64;
    			break;
    		case "Intense":
    			coef1  =  1.82;
    			break;
    		default:
    			coef1=0;
    			break;
    		}
    		}
    		else {
    			// pas de saisie
    		}
    ça permet
    1. de contraindre les choix, de ne pas permettre de saisir n'importe quelle valeur
    2. d'éviter d'avoir un message super large à l'écran, ce qui n'est pas très joli

    Si le but est de pouvoir saisir un nombre, et d'afficher seulement des valeurs indicatives, tu peux aussi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		int coef1 = Integer.parseInt(JOptionPane.showInputDialog("<html>Entrer votre coefficient d'activité,"+
    		"<ul><li>Sédentaire = 1,37</li><li>Légère 1.56</li><li>Modéré = 1,64</li><li>Intense 1,82</li></ul>"));
    pour éviter un dialogue trop large.

    Citation Envoyé par trentks95 Voir le message
    pour finir impossible par exemple de mettre 1,75 ou 1.75 au moment d'entrer sa taille... (je pense que ça vient de "Integer" ??
    Bah, oui, forcément, un int ou Integer n'a pas de virgule. Pour un double, utiliser Double.parseDouble(String). Mais cela ne suffit pas :
    1. Double.parseDouble() ne fonctionne qu'avec des nombres saisis "à l'américaine", avec un point à la place de la virgule
      solution simple : remplacer la virgule par un . :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      num0 = Double.parseDouble(JOptionPane.showInputDialog("Entrer votre Poids:").replace(',','.'));
    2. on peut saisir n'importe quoi dans le champs, des lettres, des espaces, une chaîne vide : il faudrait traiter ces cas en théorie. Dans ton programme, tout ce qu'il se passera c'est une exception(NumberFormatException) et l'arrêt de ton programme


    Citation Envoyé par trentks95 Voir le message
    et en plus ça change de fenêtre à chaque fois,
    Forcément, un JOptionPane.showInputDialog(...) ne permet de saisir qu'une valeur, donc saisir 4 valeurs en l'appelant 4 fois ouvre 4 dialogues successifs.

    Une solution en continuant d'utiliser un JOptionPane, c'est qu'au lieu de passer une String en message, on va passer un JPanel, qui permet d'afficher plusieurs composants.

    Petit 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
    public static void main(String[] args) {
     
    	JPanel panel = new JPanel(new GridLayout(0, 2, 5, 5));
     
    	panel.add(new JLabel("Entrer votre Poids:"));
            JTextField poidsField = new JTextField();
    	panel.add(poidsField);
     
    	panel.add(new JLabel("Entrer votre Taille"));
            JTextField tailleField = new JTextField();
    	panel.add(tailleField);
     
    	panel.add(new JLabel("Entrer votre Age:"));
            JTextField ageField = new JTextField();
    	panel.add(ageField);
     
    	JOptionPane.showMessageDialog(null, panel);
     
    	int poids = Integer.parseInt(poidsField.getText());
    	int taille = Integer.parseInt(tailleField.getText());
    	int age = Integer.parseInt(ageField.getText());
     
     
    	System.out.println("Poids "+ poids);
    	System.out.println("Taille " + taille);
    	System.out.println("Age " + age);
     
    }


    Citation Envoyé par trentks95 Voir le message
    mais il me manque l'option "homme ou femme"
    Pour gérer ce cas, tu peux utiliser la même chose que j'utilise au tout début, pour éviter d'avoir un dialogue trop large :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Object genre = JOptionPane.showInputDialog(null, "Saisir genre", "Entrée", JOptionPane.QUESTION_MESSAGE, null, 
    				new String[]{"Homme","Femme"}, null);
    		if ( genre!=null ) {
    			switch(genre.toString().toLowerCase()) {
    			case "homme":
    				break;
    			case "femme":
    				break;
    			}
    		}
    Maintenant, comment faire pour faire les deux cas du genre et du coef d'activité dans le cas d'une seule fenêtre, en ajoutant donc des composants dans le JPanel que j'ai montré avant.

    Pour le cas homme/femme, comme il y a deux choix possibles, donc on peut utiliser deux radio boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		panel.add(new JLabel("Entrer le genre:"));
    		ButtonGroup buttonGroup = new ButtonGroup() ;
    		JRadioButton hommeButton = new JRadioButton("Homme");
    		JRadioButton femmeButton = new JRadioButton("Femme");
    		Box genrePanel = new Box(BoxLayout.LINE_AXIS);
    		genrePanel.add(hommeButton);
    		genrePanel.add(femmeButton);
    		buttonGroup.add(hommeButton);
    		buttonGroup.add(femmeButton);
    		panel.add(genrePanel);
    		hommeButton.setSelected(true);
    Et pour récupérer la saisie, on fera simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( hommeButton.isSelected() ) {
    			// homme
    }
    else {
    			// femme
    }
    Pour l'autre cas, je ne sais pas exactement comment devrais être le champ (saisir libre, mais avec des valeurs indicatives, ou saisie parmi 4 choix et déduction du coef en fonction du choix).
    Pour le premier cas, on pourra utiliser un JSLider, dans le second, on peut utiliser la technique des JRadioButton, ou une JComboBox.

    Pour le cas homme/femme, on pourrait également utiliser une JComboBox, ce qui donnera le même résultat que celui que je t'ai montré au-dessus, par le showInputDialog
    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 confirmé

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    OUAH !! Merci infiniment pour les explications en fin pour ce cours devrai-je dire ...!

    J'essaie tout ça demain et reviens vers toi pour le résultat, franchement je suis super content, j'ai hâte de m'y remettre, c'est un prof comme toi qu'il me faudrait pas mes bouquins

    Bonne soirée,

    Seb

  4. #4
    Membre confirmé

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    Salut,

    me revoilà,

    alors si tu teste le code tu verras que cela fonctionne mais sans coef1 car il ne veut pas me prendre "coef1" il me dit qu'il n'est pas initialisé...

    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
    import javax.swing.JOptionPane;
    import javax.swing.*;
    import java.util.Scanner;
    import static java.lang.System.in;
    import static java.lang.System.out;
    import java.math.*;
    import java.text.*;
     
     
     
    class MetaBase {
    	public static void main(String[] args) {
    		Scanner calc = new Scanner(System.in);
     
    		JFrame frame = new JFrame("MetaBase");
    		frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
    		double num0; //Poids
    		double num1; //Taille
    		double num2; //Age
    		double num3 = 13.7516;  //Calcul homme
    		double num4 = 500.33;   //Calcul homme
    		double num5 = 6.7550;   //Calcul homme
    		double num6 = 66.473;   //Calcul homme
    		double num7 = 9.5634;     //Calcul femme
    		double num8 = 184.96;     //Calcul femme
    		double num9 = 4.6756;     //Calcul femme
    		double num10 = 655.0955;  //Calcul femme
    		double ans1;//Homme
    		double ans2;//Femme
    		double resulth;
    		double resultf;
    		//double coef1;//Coefficient
     
    		JOptionPane.showMessageDialog(
    				null, "Ce programme permet de calculer les Kcalories nécessaire par rapport à votre activité.","MetaBase",JOptionPane.INFORMATION_MESSAGE);
     
    		num0 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre Poids:"));
    		num1 = Double.parseDouble(JOptionPane.showInputDialog("Entrer votre Taille:").replace(',','.'));
    		//num1 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre Taille"));
    		num2 = Integer.parseInt(JOptionPane.showInputDialog("Entrer votre Age:"));
     
     
     
     
     
     
    		Object saisieCoef = JOptionPane.showInputDialog(null, "Entrer votre coefficient d'activité", 
    		                                                                                   "Entrée", 
    		                                                                                   JOptionPane.QUESTION_MESSAGE,
    		                                                                                   null,
    						                                                   new String[]{"Sédentaire","Légère","Modéré","Intense"},
    						                                                   null);
    				double coef1;
    				if ( saisieCoef!=null) {
    				switch(saisieCoef.toString()) {
    				case "Sédentaire":
    					coef1 = 1.37;
    					break;
    				case "Légère":
    					coef1 =  1.56;
    					break;
    				case "Modéré":
    					coef1  = 1.64;
    					break;
    				case "Intense":
    					coef1  =  1.82;
    					break;
    				default:
    					coef1=0;
    					break;
    				}
    				}
    				else {
    					// pas de saisie
    				}
     
    				Object genre = JOptionPane.showInputDialog(null, "Saisir genre", "Entrée", JOptionPane.QUESTION_MESSAGE, null, 
    								new String[]{"Homme","Femme"}, null);
    						if ( genre!=null ) {
    							switch(genre.toString().toLowerCase()) {
    							case "homme":
    								break;
    							case "femme":
    								break;
    							}
    						}
     
     
     
    		java.text.DecimalFormat df = new java.text.DecimalFormat("0");
     
     
    		ans1 = (num3 * num0) + (num4 * num1) - (num5 * num2) + num6;   //Résultat homme
     
            ans2 = (num7 * num0) + (num8 * num1) - (num9 * num2) + num10;  //Résultat femme
     
    		resulth = ans1;//coef1;
    		resultf = ans2;//coef1;
     
     
    		//out.print("Homme ou Femme ?");
    		//String genre = calc.next();
    		switch(genre.toString().toLowerCase()){
    			case "homme":
    			JLabel label = new JLabel("Votre apport idéal est de:" +df.format (resulth) + "Kcal");
    			frame.add(label);
    			frame.pack();
    			frame.setVisible(true);
    			//System.out.println("Votre apport idéal est de:" +df.format (ans1*coef1) + "Kcal"); //Homme
    				break;
    			case "femme":
    			JLabel label1 = new JLabel("Votre apport idéal est de:" +df.format (resultf) + "Kcal");
    			frame.add(label1);
    			frame.pack();
    			frame.setVisible(true);
     
    			    //System.out.println("Votre apport idéal est de:" +df.format (ans2*coef1) + "Kcal"); //Femme
    				break;
    			default:
     
     
     
    		}
    	}
    }
    Dans l'attente je vais travailler sur l'affichage du résultat car pour le moment il s'affiche en petit en haut à gauche...

    Merci,

    Seb

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par trentks95 Voir le message
    alors si tu teste le code tu verras que cela fonctionne mais sans coef1 car il ne veut pas me prendre "coef1" il me dit qu'il n'est pas initialisé...
    Oui, parce que c'est bien le cas : il n'est pas initialisé. Mais je ne sais pas comment tu veux le traiter : une exception, une valeur particulière par défaut, reposer la question ? C'est à toi de décider.
    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 confirmé

    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Février 2007
    Messages : 106
    Par défaut
    J'espère pas dire une connerie mais je pense qu'il faut le traiter en valeur par défaut ..? car selon le choix le résultat va changer.. puisque "resulth ou resultf" sera multiplié par "coef1"

    ...

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/12/2011, 15h56
  2. [PDO] Problème Insert nombre flotant avec virgule
    Par shadeoner dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/06/2009, 13h53
  3. Problème: fenêtres grisées avec JOptionPane
    Par zafo dans le forum Débuter
    Réponses: 2
    Dernier message: 28/09/2008, 22h28
  4. Problème de choix avec checkBox STRUTS
    Par bobic dans le forum Struts 1
    Réponses: 1
    Dernier message: 14/08/2007, 17h27
  5. Problème avec JOptionPane
    Par Shurka dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 30/07/2007, 23h49

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