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

Signaler
Messages postés
75
Date d'inscription
jeudi 12 août 2010
Statut
Membre
Dernière intervention
5 juillet 2014
-
Messages postés
16356
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 juin 2021
-
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());
}
A voir également:

4 réponses

Messages postés
16356
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 juin 2021
121
On peux plus simplement utiliser la méthode String.format (voir Formatter)

txtVal.setText(String.format("%1$td/%1$tm/%1$ty",SpinDatNaiss.getValue());
Messages postés
16356
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
4 juin 2021
121
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.
Messages postés
32878
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 juin 2021
350
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());
}


Messages postés
75
Date d'inscription
jeudi 12 août 2010
Statut
Membre
Dernière intervention
5 juillet 2014

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?