# GridLayout

> भिन्न द्वारा स्तंभों का ग्रिड, सबसे ऊँची सामग्री के अनुसार एक पंक्ति की ऊँचाई।

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

# GridLayout

बच्चों को एक **ग्रिड** में व्यवस्थित करता है: प्रत्येक पंक्ति का अपना **भिन्न द्वारा स्तंभों** का
विभाजन होता है, और पंक्ति की ऊँचाई सबसे ऊँचे घटक से आती है। "लेबल : फ़ील्ड" फ़ॉर्म के लिए उत्तम।

> 🟡 · **पैकेज:** `dev.crossfly.ui.layout` · **विस्तार करता है:** `Layout`

## कब उपयोग करें
- स्थिर अनुपात के साथ संरेखित फ़ॉर्म (लेबल | फ़ील्ड)।
- सेल की सरल तालिकाएँ।

## कब उपयोग न करें
- केवल एक स्तंभ → [VerticalLayout](/docs/ui/layouts/vertical-layout)।
- एक घटक को दूसरे से जोड़ना → [RelativeLayout](/docs/ui/layouts/relative-layout)।

## `add(...)` — हस्ताक्षर और अर्थ (क्रम पर ध्यान दें!)
```java
public GridLayout add(Object... v)   // सभी चौड़ाइयां, फिर सभी कॉम्पोनेंट
```
**पहले सभी चौड़ाइयाँ** पास करें, फिर **सभी घटक** (समान मात्रा):

| चौड़ाई | अर्थ |
|---|---|
| `> 0` (ex. `0.35f`) | ग्रिड की चौड़ाई का **भिन्न** (35%) |
| `LAY_AUTO` (`0f`) | **स्वचालित** चौड़ाई (सेल सामग्री के आकार का उपयोग करता है) |

## कंस्ट्रक्टर
| कंस्ट्रक्टर | विवरण |
|---|---|
| `new GridLayout()` | संरेखण `START`/`START` |
| `new GridLayout(Position h, Position v)` | पंक्तियों का क्षैतिज/ऊर्ध्वाधर संरेखण |

## पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
```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();

      GridLayout form = new GridLayout(Position.START, Position.START);
      // लेबल (35%) | फ़ील्ड (65%) — पहले चौड़ाइयां, फिर कॉम्पोनेंट:
      form.add(0.35f, 0.65f, new Label("Nome"),     new TextField(""));
      form.add(0.35f, 0.65f, new Label("E-mail"),   new TextField(""));
      form.add(0.35f, 0.65f, new Label("Telefone"), new TextField(""));

      Component painel = new Component();
      painel.setLayout(form);

      setLayout(new VerticalLayout(Position.START, Position.START));
      add(LAY_AUTO, new Label("Cadastro"));
      add(LAY_FILL, painel);
   }
}
```

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

## बुनियादी उपयोग
```java
GridLayout form = new GridLayout(Position.START, Position.START);
// लेबल (35%) | फ़ील्ड (65%) — पहले चौड़ाइयां, फिर कॉम्पोनेंट:
form.add(0.35f, 0.65f, new Label("Nome"),     new TextField(""));
form.add(0.35f, 0.65f, new Label("E-mail"),   new TextField(""));
form.add(0.35f, 0.65f, new Label("Telefone"), new TextField(""));

Component painel = new Component();
painel.setLayout(form);
```

## यह कैसे व्यवस्थित करता है
```
┌───────────┬──────────────────────┐
│ Nome (35%)│ [campo]        (65%)  │  ← linha 1
├───────────┼──────────────────────┤
│ E-mail    │ [campo]              │  ← linha 2
└───────────┴──────────────────────┘
```

## अच्छी प्रथाएँ
- एक पंक्ति के भिन्न चौड़ाई को कवर करने के लिए **~1.0 जोड़ते हैं**।
- पंक्तियों में **अलग-अलग स्तंभ संख्याएँ** हो सकती हैं (प्रत्येक `add` एक पंक्ति परिभाषित करता है)।

## सामान्य त्रुटियाँ
- चौड़ाई और घटक को **मिलाना**: `add(0.35f, label, 0.65f, field)` → `UIException` फेंकता है।
  सही है `add(0.35f, 0.65f, label, field)` (चौड़ाइयाँ एक साथ, फिर घटक)।
- चौड़ाइयों की संख्या ≠ घटकों की संख्या → `UIException` (`cols*2 == args`)।

## यह भी देखें
- [VerticalLayout](/docs/ui/layouts/vertical-layout) · [RelativeLayout](/docs/ui/layouts/relative-layout) · [उत्तरदायित्व](/docs/ui/layouts/responsiveness)
