2010-11-23 9 views
11

Tengo un JFormattedTextField que utilizo para restringir las entradas de una fecha y hora. Quiero usar un MaskFormatter para mostrar los caracteres de posición. ¿Hay alguna manera de usar un MaskFormatter encima del JFormattedTextField cuando el campo de texto ya está usando un SimpleDateFormat?JFormattedTextField con MaskFormatter

Gracias, Jeff

Respuesta

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

A menos que me no entender la pregunta.

+0

después de hacer esto no podemos editar el campo de texto !!! ¿Cómo arreglar eso? –

2

Como alternativa, considere un InputVerifier, como se sugiere en este InputVerificationDemo y más elaborado example.

+0

Gracias. Creo que la respuesta de @I82Much es más simple, pero esto también será útil en otras situaciones en lugar de escribir oyentes de enfoque personalizado. –

+0

¡Estoy de acuerdo! Mi ejemplo es un poco intrincado, pero útil para múltiples formatos de fecha permitidos. +1 a @ I82Much, por cierto. – trashgod

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Cyclonecode

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

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

Esto no usa un campo de entrada enmascarado –

Cuestiones relacionadas