Récupérer la valeur exacte de mon JSpinner [Résolu]

Messages postés
75
Date d'inscription
jeudi 12 août 2010
Dernière intervention
5 juillet 2014
- - Dernière réponse : KX
Messages postés
15863
Date d'inscription
samedi 31 mai 2008
Statut
Contributeur
Dernière intervention
14 décembre 2018
- 20 nov. 2013 à 20:16
Bonsoir à tous,je viens à vous pour un souci qui pourrait sembler banale mais qui m'embête extrêmement. je voudrais afficher la valeur de mon JSpinner dans un JTextfield. j'y arrive mais la valeur récupérer ne me convient pas. j'obtiens : Wed Nov 20 18:10:58 CET 2013, alors que je voudrais obtenir 20/11/2013 comme l'affiche mon JSpiner. voici mon code:

// code du JSpinner
SpinDatNaiss = new javax.swing.JSpinner();
SpinDatNaiss.setModel(new SpinnerDateModel());
Calendar calendar2 = Calendar.getInstance();
Date initDate2 = calendar2.getTime();
calendar2.add(Calendar.YEAR, -100);
Date earliestDate2 = calendar2.getTime();
calendar2.add(Calendar.YEAR, 200);
Date latestDate2 = calendar2.getTime();
SpinDatNaiss.setEditor(new JSpinner.DateEditor(SpinDatNaiss, "dd/MM/yyyy"));
SpinnerModel dateModel2 = new SpinnerDateModel(initDate2,
earliestDate2,
latestDate2,
Calendar.YEAR);

// code du bouton valider qui affiche la valeur du JSpinner dans le JTextfield
private void CmdValiderActionPerformed(java.awt.event.ActionEvent evt) {
Date val= (Date)SpinDatNaiss.getValue();
txtVal.setText(val.toString());
}
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
15863
Date d'inscription
samedi 31 mai 2008
Statut
Contributeur
Dernière intervention
14 décembre 2018
2
Merci
On peux plus simplement utiliser la méthode String.format (voir Formatter)

txtVal.setText(String.format("%1$td/%1$tm/%1$ty",SpinDatNaiss.getValue());

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de KX
Messages postés
15863
Date d'inscription
samedi 31 mai 2008
Statut
Contributeur
Dernière intervention
14 décembre 2018
2
Merci
Oui, c'est un peu compliqué car très complet, c'est pour ça que je t'ai mis le lien sur la documentation de Formatter.

Quelques exemples avec printf (qui utilise la même syntaxe) :

System.out.printf("Val=%d",17); // Val=17
Ici on a un argument, un paramètre, donc on met juste %d pour indiquer que c'est un entier.

Maintenant avec deux arguments, deux paramètres, il faut respecter l'ordre des paramètres (ici %d pour un entier, %s pour un String)
System.out.printf("%s=%d","Val",17); // Val=17

Si je veux permuter l'ordre des éléments, ou les utiliser plusieurs fois, je suis obligé d'indicer les arguments. Dans ce cas je dois intercaler 1$ et 2$ entre le % et le type
System.out.printf("%1$s=%2$d, %2$d=%1$s","Val",17); // Val=17, 17=Val

Maintenant les dates, dont le type est "t" suivi d'un autre indicateur pour savoir quel champ manipuler, d pour le jour, m pour le mois, y pour l'année :
System.out.printf("%1$td/%1$tm/%1$ty",new Date()); // 20/11/2013
Mais il y a beaucoup d'autres formats utilisables, notamment pour les heures.

L'avantage (à mon sens) d'utiliser Formatter, c'est que l'on peut combiner d'autres types de données, alors que le SimpleDateFormat ne manipules que des dates.

Un avantage par contre de SimpleDateFormat par contre est également de pouvoir faire la conversion dans l'autre sens, en lui donnant un String il peut en déduire la date, mais ce n'est pas ce qui t'intéresse ici.

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de KX
Messages postés
23610
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,
je pense qu'avec un SimpleDateFormat vous devriez pouvoir l'afficher comme vous le souhaitez.

quelque chose du genre :
// code du bouton valider qui affiche la valeur du JSpinner dans le JTextfield
private void CmdValiderActionPerformed(java.awt.event.ActionEvent evt) { 
Date val= (Date)SpinDatNaiss.getValue();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
String dateStr = simpleDateFormat.format(val); 
txtVal.setText(val.toString());
}


Commenter la réponse de jordane45
Messages postés
75
Date d'inscription
jeudi 12 août 2010
Dernière intervention
5 juillet 2014
0
Merci
Merci à vous Jordan45 et Kx pour vos réponses, elles marchent toutes, sauf que j'ai une petite question concernant la réponse de kx.
txtVal.setText(String.format("%1$td/%1$tm/%1$ty",SpinDatNaiss.getValue());
que signifie :
"%1$td/%1$tm/%1$ty"
cela voudrai-il signifier les jours, mois et années?
Commenter la réponse de coolanso

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.