# RandomLayout

> कोई स्वचालित व्यवस्था नहीं — मैनुअल (setBounds) या सापेक्ष (setRelativeBounds) स्थिति।

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

# RandomLayout

कुछ भी स्वचालित रूप से व्यवस्थित नहीं करता: प्रत्येक बच्चे को bounds की आवश्यकता होती है। यह
**डिफ़ॉल्ट लेआउट** है जब आप बिना लेआउट परिभाषित किए `add(...)` कॉल करते हैं। नाम के बावजूद, यह
**ओवरले और तैरते कार्ड** का आधार है।

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

## कब उपयोग करें
- ओवरले, तैरते कार्ड, मुक्त स्थिति।
- कस्टम लेआउट जहाँ आप bounds को नियंत्रित करते हैं।

## कब उपयोग न करें
- सामान्य स्क्रीन → व्यवस्थित करने वाले लेआउट का उपयोग करें (Vertical/Horizontal/Grid)।

## `add(...)`
```java
public Layout add(Object... params);   // सिर्फ कॉम्पोनेंट एकत्र करता है; उन्हें स्थान नहीं देता
```

## स्थिति निर्धारित करने के दो तरीके
1. **मैनुअल (पिक्सेल — उत्तरदायी नहीं):** `filho.setBounds(x, y, w, h)`।
2. **सापेक्ष (उत्तरदायी — अनुशंसित):** `filho.setRelativeBounds(Relative x, Relative y, Relative w, Relative h)`।
   `RandomLayout` का `doLayout()` सापेक्ष bounds वाले प्रत्येक बच्चे के लिए `Relative.setBounds(c)` को
   स्वचालित रूप से कॉल करता है।

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

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

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

      // खुद Window डिफ़ॉल्ट रूप से RandomLayout उपयोग करती है (बिना setLayout)
      Component card = new Component();
      card.setLayout(new VerticalLayout(Position.START, Position.START));
      card.add(LAY_AUTO, new Label("Cartão flutuante"));
      card.setRelativeBounds(
         Relative.CENTER,                            // x: केंद्रित
         Relative.CENTER,                            // y: केंद्रित
         Relative.ofScreen(0.8f, ScreenSize.MIN),   // चौड़ाई: छोटी भुजा का 80%
         Relative.ofFont(10f)                       // ऊंचाई: फॉन्ट की 10 पंक्तियां
      );
      add(card);                                     // RandomLayout सापेक्ष bounds हल करता है
   }
}
```

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

## बुनियादी उपयोग (उत्तरदायी केंद्रित कार्ड)
```java
Component overlay = new Component();          // बिना setLayout → RandomLayout
Component card = new Component();
card.setRelativeBounds(
   Relative.CENTER,                            // x: केंद्रित
   Relative.CENTER,                            // y: केंद्रित
   Relative.ofScreen(0.8f, ScreenSize.MIN),   // चौड़ाई: छोटी भुजा का 80%
   Relative.ofFont(10f)                       // ऊंचाई: फॉन्ट की 10 पंक्तियां
);
overlay.add(card);                             // RandomLayout सापेक्ष bounds हल करता है
```

## अच्छी प्रथाएँ
- `setBounds` की तुलना में **`setRelativeBounds` को प्राथमिकता दें** — उत्तरदायित्व बनाए रखता है।
- यदि आपको निश्चित `setBounds` की **आवश्यकता** हो, तो `Window.onReposition()` में पुनर्गणना करें (resize पर कॉल किया जाता है)।

## सामान्य त्रुटियाँ
- निश्चित `setBounds(x,y,w,h)` का उपयोग करना और दूसरी स्क्रीन/घनत्व पर UI का टूटना।
- यह भूल जाना कि bounds के बिना (न निश्चित, न सापेक्ष) बच्चा `(0,0)` पर 0 आकार के साथ रहता है।

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