Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
Máscaras y teclados
El EditMode del campo controla dos cosas al mismo tiempo: el formato (máscara) y el
teclado que se abre. Es la pieza central de la entrada estructurada.
EditMode → teclado
EditMode |
Formato | Teclado que abre |
|---|---|---|
NORMAL |
ninguno | teclado predeterminado del SO |
NUMERIC |
dígitos | numérico nativo (Keypad en escritorio) |
DATE |
máscara de fecha | DatePicker |
TIME |
máscara de hora | TimePicker |
CURRENCY |
moneda (separadores) | Keypad calculadora |
PASSWORD |
oculta caracteres | teclado predeterminado |
Ejemplo completo (copiar, pegar y ejecutar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*; // TextFieldStyle (config de comportamiento)
/** Pantalla principal ejecutable. Apunta el launcher (classname) y corre: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// Campo de fecha: la máscara activada abre el DatePicker al tocar
TextField data = new TextField().caption("Data");
data.setMode(EditMode.DATE, true); // maskedEdit=true → formatea y abre DatePicker
add(LAY_AUTO, data);
// Campo de moneda: formatea como moneda al escribir
TextField valor = new TextField().caption("Valor");
valor.setMode(EditMode.CURRENCY, true);
valor.<TextFieldStyle>getStyle().decimalPlaces(2);
add(LAY_AUTO, valor);
// Etiqueta donde se mostrarán los valores leídos
Label resultado = new Label("");
add(LAY_AUTO, resultado);
// NO hay callback por tecla: lee getText() al enviar.
// getTextWithoutMask() devuelve solo los dígitos (bueno p/ guardar en la base).
Button enviar = new Button("Enviar");
enviar.onAction(c -> resultado.setText(
"Data = " + data.getText() + " | Valor = " + valor.getTextWithoutMask()));
add(LAY_AUTO, enviar);
}
}
Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowde arriba.
Activar máscara automática
setMode(mode, true) activa el formato en tiempo real (maskedEdit):
TextField data = new TextField().caption("Data");
data.setMode(EditMode.DATE, true); // al escribir, se vuelve 15/03/2024 y abre el DatePicker
TextField valor = new TextField().caption("Valor");
valor.setMode(EditMode.CURRENCY, true); // formatea como moneda al escribir
valor.<TextFieldStyle>getStyle().decimalPlaces(2);
Máscara personalizada (el '9' es el dígito)
En una máscara, cada '9' es una posición de dígito; los demás caracteres son literales fijos:
TextField cpf = new TextField().caption("CPF");
cpf.<TextFieldStyle>getStyle()
.mask("999.999.999-99".toCharArray()) // 11 dígitos + separadores
.mode(EditMode.NUMERIC, true);
// getText() -> "123.456.789-00" (con máscara)
// getTextWithoutMask()-> "12345678900" (solo dígitos)
Moneda lista: TextField.getDefaultCurrencyMask(int casasDecimais) genera la máscara con los separadores
de miles/decimal del locale.
Elegir el teclado explícitamente
campo.keyboard(Keyboard.NUMERIC); // fuerza numérico
campo.keyboard(Keyboard.NONE); // nunca abre teclado (campo de solo lectura visual)
Keyboard (en UIConstants): NONE, DEFAULT, NUMERIC, KEYPAD, CALCULATOR, DATE, TIME. DEFAULT
adopta el teclado implícito en el EditMode actual.
Keypad integrado
Keyboard.KEYPAD/CALCULATOR usan el componente Keypad del propio CrossFly (no el teclado del
SO) — útil en quioscos/PDV. Se abre automáticamente por el campo; para usarlo por separado:
new Keypad(meuCampo).show(); // teclado numérico ligado al campo
Buenas prácticas
- Guarda en la base de datos el
getTextWithoutMask()(dígitos crudos); muéstralo con máscara. - Combina
mask(...)conmode(EditMode.NUMERIC, true)para documentos (CPF, código postal, teléfono). - En escritorio,
NUMERICrecurre alKeypadautomáticamente — no asumas un teclado nativo.
Errores comunes
- Activar
mode(EditMode.DATE)sinmaskedEdit=true→ sin formato automático. - Persistir
getText()(con puntos/guiones) cuando el back-end espera solo dígitos. - Máscara sin ningún
'9'→ no se acepta ningún dígito.
Ver también
- Campos de texto · Catálogo: DatePicker · TimePicker · Keypad