Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

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 a setKeyboard). Tipos disponíveis (enum Keyboard): NONE, DEFAULT, NUMERIC, KEYPAD, CALCULATOR, DATE, TIME.
  • campo.setKeyboard(Keyboard kbd) — define o teclado. Passar Keyboard.DEFAULT faz o campo adotar o teclado implícito pelo EditMode atual (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, chame keyboard(...) DEPOIS de mode(...).

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 para KEYPAD em showInput(), 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 MainWindow acima.

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

Esta página foi útil?