Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
6. Manejando la entrada
Lo que vas a aprender: reaccionar a toques, teclas y gestos, y leer la entrada de texto. Prerrequisitos: Estilos y temas.
Ejemplo completo (copiar, pegar y ejecutar)
Formulario de agregar tarea: campo + botón con validación, lectura del texto al enviar y feedback con
Hint. Agrega las tareas a un Label de salida. Compila tal cual.
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 -> { // corre en el paint thread
String texto = campo.getText().trim();
if (texto.isEmpty()) { Hint.show("Digite algo", 2000); return; } // validación (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();
}
}
Los fragmentos de abajo muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowde arriba.
onAction vs onActionThread
botao.onAction(c -> salvar()); // corre en el paint thread (rápido, toca la UI)
botao.onActionThread(c -> { // corre en hilo de fondo (trabajo pesado)
var dados = baixar();
c.onUI(() -> mostrar(dados)); // vuelve a la UI
});
Entrada de texto — lee al enviar
No hay evento por tecla: lee getText() cuando lo necesites (ej.: en el botón).
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; } // validación
adicionarTarefa(texto);
campo.clearText();
});
Foco: sobrescribe onFocus()/onBlur() en una subclase cuando necesites reaccionar a la ganancia/pérdida de foco.
Gestos de toque (sobrescribibles)
En un componente custom, sobrescribe los handlers para gestos:
@Override public void onLongTouch(float x, float y) throws Exception { abrirDetalhe(); }
// también: onTouchDown/onTouchUp/onPan
Las excepciones en callbacks van a
Debug.handle(no borbotean para derribar el frame).
Construyes en este paso
El formulario de agregar tarea (campo + botón + validación) y el gesto de abrir el detalle.
Recapitulando
onAction (UI) / onActionThread (fondo); lee texto con getText() al enviar; gestos por handlers
sobrescribibles; los errores van a Debug.handle.
Próximos pasos
Ver también
- Formularios y entrada (ui) · Fuente canónica: Capítulo 6 · Capítulo 14