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

6. Lidando com entrada

O que você vai aprender: reagir a toques, teclas e gestos, e ler a entrada de texto. Pré-requisitos: Estilos e temas.

Exemplo completo (copiar, colar e rodar)

Formulário de adicionar tarefa: campo + botão com validação, leitura do texto no envio e feedback com Hint. Adiciona as tarefas a um Label de saída. Compila como está.

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

public class MainWindow extends Window
{
   private final TextField campo = new TextField().caption("Nova tarefa");
   private final Label saida = new Label("Nenhuma tarefa ainda");

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      add(LAY_AUTO, campo);

      Button add = new Button("Adicionar");
      add.onAction(c -> {                                 // roda na paint thread
         String texto = campo.getText().trim();
         if (texto.isEmpty()) { Hint.show("Digite algo", 2000); return; }   // validação (2 args)
         adicionarTarefa(texto);
         campo.clearText();
      });
      add(LAY_AUTO, add);

      add(LAY_AUTO, saida);
   }

   private void adicionarTarefa(String texto)
   {
      saida.setText("Adicionada: " + texto);
      saida.repaint();
   }
}

Os trechos abaixo mostram só o miolo (o que vai dentro de onShow()). Para rodar, coloque-os no esqueleto MainWindow acima.

onAction vs onActionThread

botao.onAction(c -> salvar());          // roda na paint thread (rápido, toca a UI)
botao.onActionThread(c -> {             // roda em thread de fundo (trabalho pesado)
   var dados = baixar();
   c.onUI(() -> mostrar(dados));         // volta à UI
});

Entrada de texto — leia no envio

Não há evento por tecla: leia getText() quando precisar (ex.: no botão).

TextField campo = new TextField().caption("Nova tarefa");
Button add = new Button("Adicionar");
add.onAction(c -> {
   String texto = campo.getText().trim();
   if (texto.isEmpty()) { Hint.show("Digite algo", 2000); return; }   // validação
   adicionarTarefa(texto);
   campo.clearText();
});

Foco: sobrescreva onFocus()/onBlur() numa subclasse quando precisar reagir ao ganho/perda de foco.

Gestos de toque (sobrescrevíveis)

Em um componente custom, sobrescreva os handlers para gestos:

@Override public void onLongTouch(float x, float y) throws Exception { abrirDetalhe(); }
// também: onTouchDown/onTouchUp/onPan

Exceções em callbacks vão para Debug.handle (não borbulham para derrubar o frame).

Constrói neste passo

O formulário de adicionar tarefa (campo + botão + validação) e o gesto de abrir o detalhe.

Recapitulando

onAction (UI) / onActionThread (fundo); leia texto com getText() no envio; gestos por handlers sobrescrevíveis; erros vão ao Debug.handle.

Próximos passos

→ Gerenciando estado

Veja também

Esta página foi útil?