Récupérer la valeur exacte de mon JSpinner

Résolu
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014 - 20 nov. 2013 à 18:33
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 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());
}

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
20 nov. 2013 à 18:58
On peux plus simplement utiliser la méthode String.format (voir Formatter)

txtVal.setText(String.format("%1$td/%1$tm/%1$ty",SpinDatNaiss.getValue());
2
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
20 nov. 2013 à 20:16
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.
2
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
20 nov. 2013 à 18:40
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());
}


0
coolanso Messages postés 75 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 5 juillet 2014
20 nov. 2013 à 19:58
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?
0
Rejoignez-nous