Como abrir um teclado numérico
Propósito. Fazer o campo abrir um teclado só de números ao receber foco — teclado numérico nativo do sistema, o Keypad embutido do CrossFly, ou a variante calculadora.
APIs usadas
campo.keyboard(Keyboard.NUMERIC)— atalho fluente (equivalente asetKeyboard). Tipos disponíveis (enumKeyboard):NONE,DEFAULT,NUMERIC,KEYPAD,CALCULATOR,DATE,TIME.campo.setKeyboard(Keyboard kbd)— define o teclado. PassarKeyboard.DEFAULTfaz o campo adotar o teclado implícito peloEditModeatual (mode.getKeyboard()).campo.<TextFieldStyle>getStyle().mode(EditMode.NUMERIC)— define o modo numérico; como efeito,mode(...)sempre deriva o teclado do modo (NUMERIC → NUMERIC). Para sobrescrever, chamekeyboard(...)DEPOIS demode(...).
Qual escolher:
| Teclado | Comportamento |
|---|---|
NUMERIC |
Teclado numérico nativo do SO. Em desktop cai para KEYPAD. |
KEYPAD |
Componente Keypad do CrossFly (grade de teclas embutida). |
CALCULATOR |
Keypad em modo calculadora (isCalculator(true)). |
Em desktop (
Device.platform.isDesktop()),NUMERICé convertido automaticamente paraKEYPADemshowInput(), pois não há teclado virtual nativo.
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*; // TextFieldStyle (config no estilo)
/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// 1) Teclado numérico nativo (KEYPAD em desktop)
TextField idade = new TextField("");
idade.caption("Idade");
idade.<TextFieldStyle>getStyle().mode(EditMode.NUMERIC);
// 2) Forçar o Keypad embutido, independente do modo
TextField pin = new TextField("");
pin.caption("PIN");
pin.keyboard(Keyboard.KEYPAD);
// 3) Calculadora
TextField total = new TextField("");
total.caption("Total");
total.keyboard(Keyboard.CALCULATOR);
Label resultado = new Label("");
Button enviar = new Button("Enviar");
enviar.onAction(o ->
resultado.setText("Idade: " + idade.getText()
+ " · PIN: " + pin.getText()
+ " · Total: " + total.getText()));
add(LAY_FILL, idade);
add(LAY_FILL, pin);
add(LAY_FILL, total);
add(LAY_AUTO, enviar);
add(LAY_FILL, resultado);
}
}
O trecho abaixo mostra só o miolo. Para rodar, coloque-o no esqueleto
MainWindowacima.
Trecho mínimo
import dev.crossfly.ui.*;
import dev.crossfly.ui.style.*;
import static dev.crossfly.ui.UIConstants.EditMode;
import static dev.crossfly.ui.UIConstants.Keyboard;
// 1) Teclado numérico nativo (KEYPAD em desktop)
TextField idade = new TextField("");
idade.caption("Idade");
idade.<TextFieldStyle>getStyle().mode(EditMode.NUMERIC);
// 2) Forçar o Keypad embutido, independente do modo
TextField pin = new TextField("");
pin.caption("PIN");
pin.keyboard(Keyboard.KEYPAD);
// 3) Calculadora
TextField total = new TextField("");
total.keyboard(Keyboard.CALCULATOR);
Para restringir a dígitos além de abrir o teclado, combine com validChars (veja Validar um campo):
idade.<TextFieldStyle>getStyle()
.mode(EditMode.NUMERIC)
.validChars("0123456789")
.maxLength(3);
Aprofunde-se
- Máscaras e teclados · Keypad
- Receitas irmãs: Máscara de moeda · Validar um campo
- Fonte canônica: Capítulo 14 — Widgets básicos · Enums (UIConstants)
Esta página foi útil?Obrigado pelo feedback!