# इनपुट संभालना

> onAction बनाम onActionThread, फ़ोकस, TextField/TextArea और टच/जेस्चर handlers।

Source: https://crossfly.dev/hi/docs/learn/handling-input — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# 6. इनपुट संभालना

> **आप क्या सीखेंगे:** टच, कुंजियों और जेस्चर पर प्रतिक्रिया देना, और टेक्स्ट इनपुट पढ़ना।
> **पूर्वापेक्षाएँ:** [शैलियाँ और थीम](/docs/learn/styling-and-themes)।

## संपूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
कार्य जोड़ने का फ़ॉर्म: सत्यापन वाला फ़ील्ड + बटन, सबमिट पर टेक्स्ट पढ़ना और `Hint` के साथ प्रतिक्रिया।
कार्यों को एक आउटपुट `Label` में जोड़ता है। जैसा है वैसा ही compile होता है।
```java
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 -> {                                 // paint thread पर चलता है
         String texto = campo.getText().trim();
         if (texto.isEmpty()) { Hint.show("Digite algo", 2000); return; }   // सत्यापन (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();
   }
}
```
> नीचे के अंश **केवल मूल भाग** दिखाते हैं (जो `onShow()` के भीतर जाता है)। चलाने के लिए, उन्हें ऊपर के `MainWindow` ढाँचे में रखें।

## `onAction` बनाम `onActionThread`
```java
botao.onAction(c -> salvar());          // paint thread पर चलता है (तेज़, UI को छूता है)
botao.onActionThread(c -> {             // बैकग्राउंड thread पर चलता है (भारी काम)
   var dados = baixar();
   c.onUI(() -> mostrar(dados));         // UI पर वापस
});
```

## टेक्स्ट इनपुट — सबमिट पर पढ़ें
प्रति-कुंजी कोई इवेंट नहीं है: जब ज़रूरत हो तब `getText()` पढ़ें (उदा.: बटन पर)।
```java
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; }   // सत्यापन
   adicionarTarefa(texto);
   campo.clearText();
});
```
फ़ोकस: जब फ़ोकस के मिलने/खोने पर प्रतिक्रिया देनी हो तब किसी उपवर्ग में `onFocus()`/`onBlur()` को ओवरराइड करें।

## टच जेस्चर (ओवरराइड करने योग्य)
किसी custom कॉम्पोनेंट में, जेस्चर के लिए handlers को ओवरराइड करें:
```java
@Override public void onLongTouch(float x, float y) throws Exception { abrirDetalhe(); }
// साथ ही: onTouchDown/onTouchUp/onPan
```
> callbacks में अपवाद `Debug.handle` में जाते हैं (frame गिराने के लिए ऊपर नहीं उठते)।

## इस चरण में क्या बनाया जाता है
**कार्य जोड़ने का फ़ॉर्म** (फ़ील्ड + बटन + सत्यापन) और विवरण खोलने का **जेस्चर**।

## पुनरावलोकन
`onAction` (UI) / `onActionThread` (पृष्ठभूमि); सबमिट पर `getText()` से टेक्स्ट पढ़ें; ओवरराइड करने योग्य
handlers द्वारा जेस्चर; त्रुटियाँ `Debug.handle` में जाती हैं।

## अगले कदम
→ [स्टेट प्रबंधन](/docs/learn/managing-state)

## यह भी देखें
- [फ़ॉर्म और इनपुट (ui)](/docs/ui/forms-and-input) · प्रामाणिक स्रोत: अध्याय 6 · अध्याय 14
