Format
Input validation and formatting for JavaFX text controls. Provides
ready-made TextFormatters that restrict what users can type —
integers, two-decimal numbers, national IDs, Unicode-aware letters and a
max-length cap — plus shared, immutable date formatters and a
thousands-separated decimal formatter.
Validación y formateo de entrada para controles de texto de JavaFX. Ofrece
TextFormatters listos para usar que restringen lo que el usuario
puede teclear — enteros, números de dos decimales, identificaciones, letras
compatibles con Unicode y un tope de longitud máxima — más formateadores de
fecha inmutables y compartidos y un formateador decimal con separador de
miles.
OverviewVisión general
Attach a formatter to any TextField with
field.setTextFormatter(Format.getInstance().integerFormat()).
Each formatter rejects invalid keystrokes as they happen, so the field can
never hold malformed input. Regex patterns are pre-compiled once, not
rebuilt per keystroke.
Asocia un formateador a cualquier TextField con
field.setTextFormatter(Format.getInstance().integerFormat()).
Cada formateador rechaza las pulsaciones inválidas a medida que ocurren, así
el campo nunca puede contener entrada malformada. Las regex se precompilan una
vez, no se reconstruyen en cada pulsación.
Quick startInicio rápido
Format fmt = Format.getInstance();
quantityField.setTextFormatter(fmt.integerFormat());
priceField.setTextFormatter(fmt.twoDecimalFormat());
idField.setTextFormatter(fmt.idFormat(20));
nameField.setTextFormatter(fmt.lettersFormat(50)); // accepts "María", "Ñoño"
noteField.setTextFormatter(fmt.maxLengthFormat(140));
// Display a formatted amount:
String shown = fmt.getDecimalFormat().format(1234567.89); // "1,234,567.89"
Input formattersFormateadores de entrada
Digits only — no decimals, signs or other characters. Valid: "0", "123", "1234567".Solo dígitos — sin decimales, signos ni otros caracteres. Válidos: "0", "123", "1234567".
Non-negative decimals with up to two fractional digits; accepts thousands separators. Valid: "123", "123.45", "1,234.56", "1,234,567.89".Decimales no negativos con hasta dos dígitos fraccionarios; acepta separadores de miles. Válidos: "123", "123.45", "1,234.56", "1,234,567.89".
Alphanumerics and single hyphens (no consecutive hyphens). maxLength ≤ 0 means unlimited. Valid: "12345-6789", "ABC-123-DEF".Alfanuméricos y guiones simples (sin guiones consecutivos). maxLength ≤ 0 significa ilimitado. Válidos: "12345-6789", "ABC-123-DEF".
Unicode letters and single spaces between words (no digits/symbols, no consecutive spaces). maxLength ≤ 0 = unlimited. Valid: "John", "Jose Maria", "María José".Letras Unicode y espacios simples entre palabras (sin dígitos/símbolos, sin espacios consecutivos). maxLength ≤ 0 = ilimitado. Válidos: "John", "Jose Maria", "María José".
Caps the field at length characters; deletion is always allowed.Limita el campo a length caracteres; el borrado siempre se permite.
lettersFormat uses the \p{L} letter class, so accented and non-Latin names (María, Ñoño, José) are accepted — a common pain point with naive [a-zA-Z] filters.lettersFormat usa la clase de letra \p{L}, así que se aceptan nombres acentuados y no latinos (María, Ñoño, José) — un punto de dolor habitual con filtros ingenuos [a-zA-Z].
Shared formattersFormateadores compartidos
| MemberMiembro | PurposePropósito |
|---|---|
formatDateShort (field) | A DateTimeFormatter for short dates (e.g. "1/15/09"). Immutable, thread-safe, safe to share.Un DateTimeFormatter para fechas cortas (p. ej. "1/15/09"). Inmutable, thread-safe, seguro de compartir. |
formatDateMedium (field) | Medium dates (e.g. "Jan 15, 2009"). Same guarantees.Fechas medianas (p. ej. "Jan 15, 2009"). Las mismas garantías. |
getDecimalFormat() | Returns a fresh copy of the thousands-separated formatter (#,###,###,##0.00).Devuelve una copia nueva del formateador con separador de miles (#,###,###,##0.00). |
The underlying DecimalFormat is mutable and not thread-safe, so the field is private and getDecimalFormat() hands back an independent clone. Call it where you need it; don't share one instance between threads.El DecimalFormat subyacente es mutable y no thread-safe, por eso el campo es privado y getDecimalFormat() devuelve un clon independiente. Llámalo donde lo necesites; no compartas una instancia entre hilos.
RecommendationsRecomendaciones
Do set formatters once when wiring up the view (e.g. in the controller's initialize).Asigna los formateadores una vez al armar la vista (p. ej. en el initialize del controlador).
Combine input restriction (a formatter) with post-submit checks via Validator — the formatter stops bad keystrokes, the validator confirms the final value (e.g. range, e-mail).Combina la restricción de entrada (un formateador) con comprobaciones tras el envío vía Validator — el formateador detiene pulsaciones malas, el validador confirma el valor final (p. ej. rango, e-mail).