Précédent   Forum des professionnels en informatique > Java > Interfaces Graphiques en Java > JavaFX
JavaFX Forum d'entraide pour le langage JavaFX et la création d'interfaces graphiques en JavaFX. Avant de poster -> FAQ JavaFX
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2012, 19h00   #1
Membre confirmé
 
Inscription : novembre 2004
Messages : 95
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2004
Messages : 95
Points : 231
Points : 231
Par défaut [FX2.0] Y a-t-il un équivalent à JFormattedTextField

Yop.

Je crois que tous est dans le titre : je cherche un equivalent JavaFX a JFormattedTextField, histoire de faire un binding sur la valeur, et non pas sur le champ.

Bon, on peut parvenir a la même chose avec Bindings.format, mais ça ne marche que dans un sens. Pour le binding bi-directionnel, c'est plus compliqué.

Teocali
Teocali est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 15h17   #2
Membre confirmé
 
Avatar de la.lune
 
Homme Bilal Soidik
Ingénieur développement logiciels
Inscription : décembre 2010
Messages : 126
Détails du profil
Informations personnelles :
Nom : Homme Bilal Soidik

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : décembre 2010
Messages : 126
Points : 221
Points : 221
Envoyer un message via MSN à la.lune Envoyer un message via Yahoo à la.lune Envoyer un message via Skype™ à la.lune
Si c'est pour le binding alors pourquoi pas ne pas Binder sur le TexteProperty du TextFeld

Voila un nouveau exemple complet publié par Oracle sur la gallerie des Exemple d'application. Au fait c'est un champ à saisir une date et un label qui nous indique la forme du date à saisir, alors ce label est bindé avec le TextProperty du TextField ,mais ils ont ajouté des instructions de teste de manière que le label ne va pas commencer à afficher la date saisie que lorsque la date est valide au minimun comme ça 12/12/1 (i.e 12/04/ ne va rien affiché selon le format donné)

Voila ce qui s'affiche en entrée
String1.png

Je fais une saisie
SSS.png

La saisie est valide donc commence à être affiché:
AAA.png

Ce que j'ai trouvé aussi fort que lors de la définition de la méthode protected String computeValue()
Il a utilisé les Exception de manière que ce qui est affiché au début n'est autre que ce qui est retourné après le catch

Voila le code:


Code :
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
148
149
150
151
152
153
154
155
 
 
/**
 
 * Copyright (c) 2008, 2011 Oracle and/or its affiliates.
 
 * All rights reserved. Use is subject to license terms.
 
 */
 
import javafx.application.Application;
 
import javafx.scene.Group;
 
import javafx.scene.Scene;
 
import javafx.stage.Stage;
 
import java.text.SimpleDateFormat;
 
import java.util.Calendar;
 
import java.util.Date;
 
import javafx.beans.binding.StringBinding;
 
import javafx.geometry.Insets;
 
import javafx.scene.control.Label;
 
import javafx.scene.control.TextField;
 
import javafx.scene.layout.VBox;
 
 
 
 
 
/**
 
 * A sample that demonstrates how to bind text properties so the
 
 * value of the bound property is updated automatically when the value
 
 * of the original property is changed.
 
 *
 
 * @see javafx.beans.binding.StringBinding
 
 * @see javafx.scene.control.TextField
 
 * @see javafx.scene.control.Label
 
 */
 
public class StringBindingSample extends Application {
 
 
 
    private void init(Stage primaryStage) {
 
        Group root = new Group();
 
        primaryStage.setScene(new Scene(root));
 
        final SimpleDateFormat format = new SimpleDateFormat("mm/dd/yyyy");
 
        final TextField dateField = new TextField();
 
        dateField.setPromptText("Enter a birth date");
 
        dateField.setMaxHeight(TextField.USE_PREF_SIZE);
 
        dateField.setMaxWidth(TextField.USE_PREF_SIZE);
 
 
 
        Label label = new Label();
 
        label.textProperty().bind(new StringBinding() {
 
            {
 
                bind(dateField.textProperty());
 
            }            
 
            @Override protected String computeValue() {
 
                try {
 
                    Date date = format.parse(dateField.getText());
 
                    Calendar c = Calendar.getInstance();
 
                    c.setTime(date);
 
 
 
                    Date today = new Date();
 
                    Calendar c2 = Calendar.getInstance();
 
                    c2.setTime(today);
 
 
 
                    if (c.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR) - 1
 
                            && c.get(Calendar.YEAR) == c2.get(Calendar.YEAR)) {
 
                        return "You were born yesterday";
 
                    } else {
 
                        return "You were born " + format.format(date);
 
                    }
 
                } catch (Exception e) {
 
                    return "Please enter a valid birth date (mm/dd/yyyy)";
 
                }
 
            }
 
        });
 
 
 
        VBox vBox = new VBox(7);
 
        vBox.setPadding(new Insets(12));
 
        vBox.getChildren().addAll(label, dateField);
 
        root.getChildren().add(vBox);
 
    }
 
 
 
    @Override public void start(Stage primaryStage) throws Exception {
 
        init(primaryStage);
 
        primaryStage.show();
 
    }
 
    public static void main(String[] args) { launch(args); }
 
}
La liaison est faite comme ça Label lié avec le textProperty() du champ TextField
BindS.png
la.lune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 18h36   #3
Membre confirmé
 
Avatar de la.lune
 
Homme Bilal Soidik
Ingénieur développement logiciels
Inscription : décembre 2010
Messages : 126
Détails du profil
Informations personnelles :
Nom : Homme Bilal Soidik

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : décembre 2010
Messages : 126
Points : 221
Points : 221
Envoyer un message via MSN à la.lune Envoyer un message via Yahoo à la.lune Envoyer un message via Skype™ à la.lune
PS: Je sais que ton problème n'est pas encore résolu mais c'est juste un coup de main au cas où tu te retrouverait sur ce genre de situation. Car je pense que pour avoir l'équivalent de JFormattedTextField il faut le coder, j'ai dis je pense!
la.lune est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 04h50   #4
Modérateur
 
Avatar de bouye
 
Homme Fabrice Bouyé
Développeur Java
Inscription : août 2005
Messages : 3 908
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Bouyé
Âge : 35
Localisation : Nouvelle-Calédonie

Informations professionnelles :
Activité : Développeur Java
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2005
Messages : 3 908
Points : 5 990
Points : 5 990
En faisant une petite expérimentation, Richard Bair a semble-t-il trouvé un bon palliatif à ce problème. Même si l'API actuelle de TextField ne permet pas de mettre en place des validateurs et formatteurs, sa skin permet de le faire !

Voir MoneyField pour plus de détails.
__________________
Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

Mon blog sur Développez.

Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
bouye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 17h20   #5
Membre confirmé
 
Avatar de la.lune
 
Homme Bilal Soidik
Ingénieur développement logiciels
Inscription : décembre 2010
Messages : 126
Détails du profil
Informations personnelles :
Nom : Homme Bilal Soidik

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Enseignement

Informations forums :
Inscription : décembre 2010
Messages : 126
Points : 221
Points : 221
Envoyer un message via MSN à la.lune Envoyer un message via Yahoo à la.lune Envoyer un message via Skype™ à la.lune
Mais je pense que l'article publié avant ça sur la restriction sus les champs TextField peut d'une part d'avoir des restriction sur le champs tout en spécifiant ce qui doit être saisie.
la.lune est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h39.


 
 
 
 
Partenaires

Hébergement Web