Comment fonctionne un MaskFormatter java

Résolu/Fermé
muntu - 15 févr. 2012 à 14:36
 muntu - 16 févr. 2012 à 03:35
Bonjour,

J'aimerai faire le contrôle de saisie de mes JFormattedTextField, seulement quand je quitte un champ de texte pour aller à un autre, le texte que je viens de taper disparait. Cest à dire à l'instant où je quitte ma textfield les données rentrées disparaissent. Quelqu'un veut bien m'aider s'il vous plait ?

Merci d'avance !
A voir également:

4 réponses

Merci pour ton aide KX, j'ai compris le fonctionnement de Maskformatter. Et je sais que tu sais que ma question a été résolue. Pour les futurs programmateurs je laisse donc ceci :

((JFormattedTextField) jtf).setFocusLostBehavior( JFormattedTextField.PERSIST );

Cela permet de garder ce que je saisis dans la zone de texte même si le nombre maxi de caractères n'est pas atteint.

Merci encore.
6
Merci de faire attention à mes posts. Seulement si je le fais, c'est pasque c'est urgent et je suis débuttant en java.

Je suppose que vous avez compris mon problème, mais il me semble que ce n'était pas une erreur, maskformatter à mon avis, d'après tous les différents codes que j'ai essayé, masque les saisies dans la zone de texte. Alors que moi, ce que j'aimerai avoir : c'est d'empêcher la saisie des nombres et lorsque je passe dans un autre textfield, que les données tappées ne soient pas masquées mais visible. Je voulais savoir s'il y a une autre instruction qui permet d'empêcher les numériques et qui ne masque pas mes données. merci d'avance pour votre aide.


voici un exemple de code :


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;


public class field {



private JPanel container = new JPanel();
private static JFormattedTextField jtf;
private static JFormattedTextField jtf2;
private static JLabel label = new JLabel("Téléphone FR ");
private static JLabel label1 = new JLabel("Téléphone FR ");
private JButton b = new JButton ("OK");


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

JFrame field = new JFrame();

field.setTitle("Animation");
field.setSize(400, 450);
field.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
field.setLocationRelativeTo(null);

// container.setBackground(Color.white);
// container.setLayout(new BorderLayout());


JTextField jtf = new JTextField();
JTextField jtf2 = new JTextField();


try{


MaskFormatter tel = new MaskFormatter("UUUUU");
jtf = new JFormattedTextField(tel);
jtf2 = new JFormattedTextField(tel);



JPanel top = new JPanel();



Font police = new Font("Arial", Font.BOLD, 14);

jtf.setFont(police);
jtf.setPreferredSize(new Dimension(150, 30));
jtf.setForeground(Color.BLUE);

top.add(label);
top.add(jtf);


jtf2.setFont(police);
jtf2.setPreferredSize(new Dimension(50, 30));
jtf2.setForeground(Color.BLUE);




top.add(label1);
top.add(jtf2);

field.setContentPane(top);
field.setVisible(true);



}catch(ParseException e){
e.printStackTrace();
}


}





}
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 févr. 2012 à 16:19
Tes données "disparaissent" lorsque ce qui est entré ne correspond pas au mask défini.
Concrètement, tu imposes "UUUUU" c'est à dire 5 lettres majuscules, si tu tapes une minuscule elle est convertie en majuscule, si tu essayes d'entrer un chiffre, un symbole de ponctuation, ou une 6è lettre ça bloque, et surtout : si tu tapes moins de 5 lettres majuscules et que tu changes de zone, alors ça s'efface puisque l'entrée est mauvaise !

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.text.ParseException;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

public class Field
{
    private static final Font POLICE = new Font("Arial", Font.BOLD, 14);
    
    private static JTextField fromMask(String mask,int w,int h) throws ParseException
    {
        JTextField jtf = new JFormattedTextField(new MaskFormatter(mask));
        jtf.setFont(POLICE);
        jtf.setPreferredSize(new Dimension(w, h));
        jtf.setForeground(Color.BLUE);
        return jtf;
    }
    
    public static void main(String...args) throws ParseException 
    {
        JPanel top = new JPanel();
            top.add(new JLabel("Téléphone FR"));
            top.add(fromMask("UUUUU",100,30));        
            top.add(new JLabel("Téléphone FR"));
            top.add(fromMask("[U.U.U.U.U]",100,30));
        
        JFrame field = new JFrame();        
            field.setTitle("Animation");
            field.setSize(250, 200);
            field.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            field.setLocationRelativeTo(null);
            field.setContentPane(top);
            field.setVisible(true);
    }
}
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 févr. 2012 à 15:12
Ce n'est pas la peine de poser sans cesse la même question dans des posts différents !
Tu as déjà posé cette question au moins 4 fois dans le forum (dont une partie a déjà été modérée pour doublons), le problème c'est que pour t'aider il faut que l'on puisse avoir ton erreur, et donc que tu nous donne un code, pas forcément très long, mais où l'on puisse voir exactement ce dont tu parles juste en lançant le programme. Parce que si c'est nous qui faisons le code 1) ça va nous prendre du temps qu'on a pas forcément, et 2) on risque de le faire bien tout de suite sans reproduire ton erreur !
Donc, arrêtes de créer des doublons, et donne nous un code exploitable que l'on puisse voir ce qui pose problème.
0