2010-11-23 26 views
11

J'ai un JFormattedTextField que j'utilise pour limiter les entrées d'une date et d'une heure. Je veux utiliser un MaskFormatter pour afficher les caractères substituables. Est-il possible d'utiliser un MaskFormatter sur le JFormattedTextField lorsque le champ de texte utilise déjà un SimpleDateFormat?JFormattedTextField avec MaskFormatter

Merci, Jeff

Répondre

27
public class MaskFormatterTest { 
    private static final DateFormat df = new SimpleDateFormat("yyyy/mm/dd"); 


    public static void main(String[] args) { 
     JFrame frame = new JFrame(""); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 

     JFormattedTextField tf = new JFormattedTextField(df); 
     tf.setColumns(20); 
     panel.add(tf); 
     try { 
      MaskFormatter dateMask = new MaskFormatter("####/##/##"); 
      dateMask.install(tf); 
     } catch (ParseException ex) { 
      Logger.getLogger(MaskFormatterTest.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

alt text

À moins que je suis malentendu la question.

+0

après avoir fait cela, nous ne pouvons pas modifier le champ de texte !!! Comment réparer ça? –

2

Sinon, envisager un InputVerifier, comme suggéré dans InputVerificationDemo et cela plus élaborée example.

+0

Merci. Je pense que la réponse de @ I82Much est plus simple, mais cela sera également utile dans d'autres situations plutôt que d'écrire des auditeurs de focus personnalisés. –

+0

Je suis d'accord! Mon exemple est un peu compliqué, mais pratique pour plusieurs formats de date autorisés. +1 à @ I82Much, au fait. – trashgod

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – Cyclonecode

-2
JFormattedTextField tft3 = 
    new JFormattedTextField(new SimpleDateFormat("yyyy-MM-dd")); 
    tft3.setValue(new Date()); 

    Date date = (Date) tft3.getValue(); 
+1

Cela n'utilise pas un champ d'entrée masqué –