# Label

> पाठ (word-wrap के साथ) और/या read-only आइकन प्रदर्शित करने के लिए गैर-इंटरैक्टिव कॉम्पोनेंट।

Source: https://crossfly.dev/hi/docs/ui/widgets/label — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Label

`Label` सबसे अधिक उपयोग किया जाने वाला **प्रदर्शन** विजेट है: यह केवल-पढ़ने योग्य पाठ दिखाता है, स्वचालित पंक्ति विच्छेदन (word-wrap), कई पंक्तियों (`\n` के माध्यम से स्पष्ट या स्वचालित) और बाईं और/या दाईं ओर वैकल्पिक आइकन के साथ। यह स्पर्श पर प्रतिक्रिया नहीं करता — कार्रवाइयों के लिए [`Button`](/docs/ui/widgets/button) का उपयोग करें; संपादन योग्य पाठ के लिए [`TextField`](/docs/ui/widgets/textfield)/[`TextArea`](/docs/ui/widgets/textarea) का उपयोग करें।

रेंडरिंग सक्रिय `Design` को सौंपी जाती है: `Label` केवल `onLayout()` में निर्देशांक गणना करता है और सार्वजनिक फ़ील्ड उजागर करता है जिनका `Design` उपभोग करता है (फ़ॉन्ट, रंग और बॉर्डर `LabelStyle` से आते हैं)।

> 🟢 · **पैकेज:** `dev.crossfly.ui` · **विस्तारित करता है:** `Component` · **स्टाइल:** `LabelStyle`

## कब उपयोग करें
- शीर्षक, उपशीर्षक, कैप्शन और read-only मान।
- बाईं या दाईं ओर सूचनात्मक आइकन के साथ पाठ।
- पाठ के ब्लॉक जिन्हें कई पंक्तियों में विभाजित होना चाहिए।

## कब उपयोग न करें
- संपादन योग्य पाठ → [`TextField`](/docs/ui/widgets/textfield) / [`TextArea`](/docs/ui/widgets/textarea) का उपयोग करें।
- स्पर्श करने योग्य / क्लिक करने योग्य तत्व → [`Button`](/docs/ui/widgets/button) का उपयोग करें (`Label` स्पर्श पर प्रतिक्रिया नहीं देता)।

## दिखावट
पाठ आंतरिक क्षेत्र (`ingap` के बाद) के भीतर रेंडर होता है, `LabelStyle.textAlignH`/`textAlignV` के अनुसार क्षैतिज और ऊर्ध्वाधर रूप से संरेखित। बायां आइकन आंतरिक बाएं किनारे से सटा रहता है; दायां आंतरिक दाएं किनारे से; पाठ उनके बीच का स्थान घेरता है।

``

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

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

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

      // केवल-पठन Label जो बटन द्वारा अपडेट किया जाएगा
      Label saida = new Label("Toque no botão abaixo");
      add(LAY_AUTO, saida);

      // बटन जो Label का टेक्स्ट बदलता है (Label.setText फ्लुएंट है और Label लौटाता है)
      Button ola = new Button("Dizer olá").onAction(c -> saida.setText("Olá, mundo!"));
      add(LAY_AUTO, ola);
   }
}
```

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

## बुनियादी उपयोग
```java
Label hello = new Label("Olá, mundo!");
container.add(LAY_AUTO, hello);
```

## कंस्ट्रक्टर
| कंस्ट्रक्टर | विवरण |
|---|---|
| `Label()` | खाली label (`text = ""`) |
| `Label(String text)` | पाठ label |
| `Label(Icon onlIcon)` | केवल-आइकन label (बाईं ओर आइकन) |

## गुण और अनुकूलन
| गुण / मेथड | प्रकार | डिफ़ॉल्ट | क्या करता है |
|---|---|---|---|
| `setText(String)` | `Label` (फ्लुएंट) | — | पाठ बदलता है; **केवल तभी** लेआउट अमान्य करता है जब मान बदला हो |
| `leftIcon(Icon)` | `Label` (फ्लुएंट) | `null` | पाठ के बाईं ओर आइकन परिभाषित करता है |
| `rightIcon(Icon)` | `Label` (फ्लुएंट) | `null` | पाठ के दाईं ओर आइकन परिभाषित करता है |
| `text` | `String` (सार्वजनिक फ़ील्ड) | `""` | वर्तमान सामग्री (`\n` हो सकता है) |
| स्टाइल `.textAlign(Position, Position)` | `Position` | थीम | पाठ का क्षैतिज/ऊर्ध्वाधर संरेखण |
| स्टाइल `.backColor(int)` / `.borderColor(int)` | ARGB | थीम | पृष्ठभूमि/बॉर्डर (पारदर्शी के लिए `0` का उपयोग करें) |
| `getAutoWidth()` / `getAutoHeight(int)` | `int` | — | पसंदीदा आकार (लेआउट द्वारा उपयोग किए जाते हैं) |
| `Label.wordWrap(String, Font, int)` *(static)* | `String[]` | — | चौड़ाई के अनुसार पंक्ति विच्छेदन की उपयोगिता |

> `setText(String)` `Label` लौटाता है (फ्लुएंसी के लिए), `void` **नहीं** — इसीलिए `Label`, `setText`/`text` उजागर करने के बावजूद, `implements TextComponent` घोषित नहीं करता।

## कॉलबैक और इवेंट
कोई नहीं। `Label` गैर-इंटरैक्टिव है — यह न तो `onAction` न ही स्पर्श इवेंट चलाता है।

## अवस्थाएं
कोई इंटरैक्शन अवस्था नहीं (`pressed`/`focused` नहीं है)। दृश्य केवल लागू स्टाइल के साथ या `setEnabled(false)` के माध्यम से बदलता है (`Design` के अनुसार अक्षम दिखावट)।

### बाईं ओर आइकन और बिना पृष्ठभूमि वाला उपशीर्षक
```java
// बाईं ओर आइकन वाला Label (Material "info")
Label info = new Label("Informação")
   .leftIcon(new MaterialIcon(""));
container.add(LAY_AUTO, info);

// बाईं ओर संरेखित उपशीर्षक, बिना बैकग्राउंड/बॉर्डर
Label sub = new Label("Lista:").style(
   Styles.theme().label(LabelRole.SUBTITLE)
      .backColor(0)
      .borderColor(0)
      .textAlign(Position.START, Position.CENTER));
container.add(LAY_AUTO, sub);
```

### बहु-पंक्ति (word-wrap + स्पष्ट `\n`)
```java
// स्पष्ट लाइन-ब्रेक
Label endereco = new Label("Rua das Flores, 123\nCentro\n01000-000");

// स्वचालित Word-wrap: ब्रेक होने के लिए Label को चौड़ाई दें (LAY_FILL)
Label paragrafo = new Label(
   "Este texto longo quebra automaticamente em várias linhas quando "
 + "a largura disponível é menor que a largura do texto.");
container.add(LAY_FILL, paragrafo);
```

## सर्वोत्तम प्रथाएं
- word-wrap के लिए, सुनिश्चित करें कि लेआउट `Label` को **चौड़ाई** दे (जैसे `VerticalLayout` में `add(LAY_FILL, label)`)। ज्ञात चौड़ाई के बिना, ऊंचाई में केवल स्पष्ट `\n` गिने जाते हैं।
- फ़ॉन्ट/रंग हार्ड-कोड करने के बजाय थीम की भूमिकाओं (`LabelRole.TITLE`/`SUBTITLE`/…) का उपयोग करें।

## सामान्य गलतियां
- **परिभाषित चौड़ाई के बिना word-wrap की अपेक्षा करना:** यदि ऊंचाई गणना में चौड़ाई `0`/अज्ञात है, तो केवल स्पष्ट `\n` विच्छेद गिने जाते हैं। `Label` को चौड़ाई दें।
- **`setText` को `TextComponent.setText` अनुबंध के साथ भ्रमित करना:** यहां `setText` `Label` लौटाता है, `void` नहीं; `Label` `TextComponent` को कार्यान्वित नहीं करता।

## यह भी देखें
- क्षेत्र गाइड: [`ui/`](/docs/ui) · रेसिपीज़: [`cookbook/`](/docs/cookbook)
- अवधारणा ("सब कुछ `Component` है"): [`concepts/`](/docs/concepts)
- संबंधित कॉम्पोनेंट: [`Button`](/docs/ui/widgets/button) · [`TextField`](/docs/ui/widgets/textfield) · [`ImageView`](/docs/ui/widgets/imageview)
