# टेक्स्ट क्षेत्र

> TextArea — बहु-पंक्ति इनपुट, स्क्रॉलिंग और प्रति-पंक्ति आइकन।

Source: https://crossfly.dev/hi/docs/ui/forms-and-input/text-areas — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# टेक्स्ट क्षेत्र (`TextArea`)

`TextArea` एक **बहु-पंक्ति** फ़ील्ड है — `TextField` के समान आधार (`TextInput`), जिसमें पंक्ति
विभाजन, ऊर्ध्वाधर स्क्रॉलिंग और प्रति-पंक्ति आइकन हैं।

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*;   // TextAreaStyle (व्यवहारिक कॉन्फ़िग)

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      // बहु-पंक्ति क्षेत्र: स्पष्ट ऊँचाई की आवश्यकता है।
      // यहाँ कंटेनर के अंश के माध्यम से (ऊँचाई का 40%); विकल्प: स्टाइल में autoHeight।
      TextArea obs = new TextArea().caption("Observações");
      add(0.4f, obs);

      // लेबल जहाँ पढ़ी गई सामग्री प्रदर्शित होगी
      Label resultado = new Label("");
      add(LAY_AUTO, resultado);

      // प्रति-कुंजी कोई callback नहीं है: सबमिट पर getText() पढ़ें
      Button enviar = new Button("Enviar");
      enviar.onAction(c -> resultado.setText("Chars = " + obs.getText().length()));
      add(LAY_AUTO, enviar);
   }
}
```

> नीचे दिए गए स्निपेट **केवल मुख्य भाग** दिखाते हैं (जो `onShow()` के अंदर जाता है)। चलाने के लिए, उन्हें ऊपर दिए गए `MainWindow` ढाँचे में रखें।

## बुनियादी उपयोग
```java
TextArea obs = new TextArea()
   .caption("Observações")
   .text("");
painel.add(0.5f, obs);   // कंटेनर की ऊँचाई का 50% घेरता है (VerticalLayout)

// सामग्री पढ़ना:
String texto = obs.getText();
```

## कंस्ट्रक्टर और fluent API
| सदस्य | प्रभाव |
|---|---|
| `new TextArea()` / `new TextArea("texto")` | खाली / प्रारंभिक मान के साथ |
| `.caption(String)` | कैप्शन |
| `.text(String)` / `setText(String)` | सामग्री सेट करता है |
| `.rightIcons(Icon...)` | दाईं ओर आइकन, प्रति क्रिया पंक्ति एक |
| `.rightIconAction(int linha, Action)` | किसी विशिष्ट आइकन की क्रिया |
| `getText()` / `clearText()` | पढ़ना / साफ़ करना |
| `scrollToTop()` · `scrollToBottom()` · `scrollToLine(int)` | प्रोग्रामेटिक स्क्रॉलिंग |

## आकार देना
`TextField` (एक पंक्ति की ऊँचाई) के विपरीत, `TextArea` को **स्पष्ट ऊँचाई** की आवश्यकता होती है — `VerticalLayout` में एक
अंश दें या स्टाइल में `autoHeight`:
```java
obs.getStyle().autoHeight(Relative.ofFont(6f));   // ~6 पंक्ति ऊँचाई
```

## अच्छे तौर-तरीके
- पर्याप्त ऊँचाई आरक्षित करें (कंटेनर का अंश या `autoHeight`) — अन्यथा यह 1-पंक्ति फ़ील्ड बन जाता है।
- टेक्स्ट जोड़ते समय (जैसे: log/chat) अंतिम पंक्ति दृश्यमान रखने के लिए `scrollToBottom()` का उपयोग करें।

## आम गलतियाँ
- ऊँचाई सेट न करना → क्षेत्र बहुत छोटा रहता है।
- क्षैतिज स्क्रॉलिंग की उम्मीद करना — `TextArea` पंक्ति तोड़ता है; एक स्क्रॉल करने योग्य पंक्ति के लिए `TextField` का उपयोग करें।

## यह भी देखें
- [टेक्स्ट फ़ील्ड](/docs/ui/forms-and-input/text-fields) · [फ़ोकस और मान्यता](/docs/ui/forms-and-input/focus-and-validation)
- कैटलॉग: [TextArea](/docs/ui/widgets/textarea) · संदर्भ: अध्याय 14
