2009-08-24 13 views

Respuesta

15

JFormattedTextField es malo debido a la mala usabilidad. Por ejemplo, si un campo de texto solo puede aceptar un valor entero, JFormattedTextField permitirá cualquier basura vieja y luego se quejará cuando se pierda el foco. Para empeorar las cosas, tiene un rango de comportamientos configurables cuando se pierde el foco (una clara señal de que ninguno de ellos es la elección correcta).

También tiene la selección del formateador "k3wl". También parece tener poca interacción con el documento (intenta instalar un DocumentFilter, pero eso no es parte de la interfaz Document).

9

Admitiré que JFormattedTextField no es la clase más fácil de usar, y sí tiene problemas, pero como la mayoría de los componentes, hace un trabajo razonable en algunos aspectos y un mal trabajo en otros.

De hecho, le permite editar valores enteros a medida que se escriben los datos cuando utiliza MaskFormatter. Entonces, para tareas simples puede ser efectivo.

La edición de datos es una tarea compleja. Algunas veces necesita editar los datos tal como se ingresan (en el caso de verificar valores Enteros). Algunas veces necesita editar los datos después de haberlos ingresado (en el caso de validar una fecha). Entonces, por supuesto, debe decidir cómo manejar los datos no válidos.

Puede haber una cierta cantidad de configuración de los parámetros al realizar tareas no triviales. Es posible que no siempre funcionen de la forma que usted desea o de la manera en que lo espera, por lo que debe experimentar para saber cuándo puede/debe usar este componente.

+3

El principal problema con JFormattedTextField es que está optimizado para un caso de uso raro, en lugar de uno común, mientras que falta un componente para la tarea común. AWT ya es bastante malo, pero Swing, una vez más, ha sido diseñado por personas que no tenían ni idea sobre el estado del arte en la programación de GUI, ¡y cometiendo los mismos errores dos veces era realmente malo! Si los diseñadores de Java y Swing hubieran mirado lo que Delphi o NeXt's Interface Builder pudieron hacer desde principios de los 90 y cómo lo hicieron, ¡tanto el lenguaje como Swing serían mucho más fáciles de usar! –

7

Estoy luchando con JFormattetTextField por el momento. Intento usar NumberFormat.getPercentInstance() para formatear mi valor porcentual.

Lo peor es que .getValue() no devuelve el mismo valor que el usuario está viendo. En el ejemplo si escribo 25,5% en el campo de texto formateado, entonces lo redondea a 26%, pero .getValue() devuelve 0.255. Eso es malvado

+1

Pregunta relacionada: http://stackoverflow.com/questions/2206371/how-to-get-the-same-value-as-the-user-is-seeing-from-a-jformattedtextfield – Jonas