# सिलेक्शन Dropdown का उपयोग कैसे करें

> एक ड्रॉपडाउन सूची खोलें, चयन पर प्रतिक्रिया दें और चयनित आइटम प्राप्त करें।

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

# सिलेक्शन Dropdown का उपयोग कैसे करें

**उद्देश्य.** आइटम की एक सूची से एकल चयन प्रदान करना, जो एक तीर वाले बटन के रूप में
प्रदर्शित होता है जो टैप करने पर एक पॉपअप (`ListViewWindow`) खोलता है। चयन करने के बाद,
Dropdown का टेक्स्ट चयनित आइटम दिखाने लगता है। स्क्रीन पर स्थायी जगह घेरे बिना
कुछ/मध्यम विकल्पों में से चुनने के लिए इसका उपयोग करें।

## उपयोग की गई APIs
- `new Dropdown(String placeholder, String[] items)` — एक प्लेसहोल्डर टेक्स्ट और आइटम के array के साथ ड्रॉपडाउन बनाता है।
- `new Dropdown(String[] items)` — डिफ़ॉल्ट प्लेसहोल्डर `"Select..."` वाला वेरिएंट।
- `dropdown.onSelect(Component.Action action)` — उपयोगकर्ता द्वारा पॉपअप में चयन की पुष्टि करने के **बाद** ट्रिगर होने वाला कॉलबैक।
- `dropdown.getSelectedIndex()` — चयनित आइटम का इंडेक्स, या यदि कोई नहीं तो `-1`।
- `dropdown.getSelectedText()` — चयनित आइटम का टेक्स्ट, या यदि कोई नहीं तो `null`।
- `dropdown.setSelectedIndex(int index)` — प्रोग्रामैटिक रूप से चयन करता है और प्रदर्शित टेक्स्ट को अपडेट करता है।
- `dropdown.popupHeightRatio(float)` / `dropdown.popupWidthRatio(float)` — पॉपअप के आकार को स्क्रीन के सापेक्ष समायोजित करते हैं।

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

      String[] estados = { "Acre", "Bahia", "São Paulo", "Paraná" };

      Dropdown uf = new Dropdown("Selecione o estado", estados);

      uf.onSelect(origin ->
      {
         int i = uf.getSelectedIndex();       // -1 यदि कुछ नहीं चुना
         String texto = uf.getSelectedText(); // null यदि कुछ नहीं चुना
         filtrarPorEstado(texto);
      });

      // प्रोग्रामेटिक पूर्व-चयन (वैकल्पिक)
      uf.setSelectedIndex(2);   // "São Paulo"

      add(0.5f, uf);            // पंक्ति में आधी चौड़ाई (GridLayout)
   }

   private void filtrarPorEstado(String estado)
   {
      // ... चुने गए राज्य के अनुसार सूची फ़िल्टर करें ...
   }
}
```

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

## न्यूनतम अंश
```java
String[] estados = { "Acre", "Bahia", "São Paulo", "Paraná" };

Dropdown uf = new Dropdown("Selecione o estado", estados);

uf.onSelect(origin ->
{
   int i = uf.getSelectedIndex();       // -1 यदि कुछ नहीं चुना
   String texto = uf.getSelectedText(); // null यदि कुछ नहीं चुना
   filtrarPorEstado(texto);
});

// प्रोग्रामेटिक पूर्व-चयन (वैकल्पिक)
uf.setSelectedIndex(2);   // "São Paulo"

add(0.5f, uf);            // पंक्ति में आधी चौड़ाई (GridLayout)
```

> **सत्यापन नोट (कोड 2026).** स्रोत में पुष्टि: `Dropdown`, `Button` को एक्सटेंड करता है;
> कंस्ट्रक्टर `Dropdown(String placeholder, String[] items)` और `Dropdown(String[] items)`;
> `onSelect(Action)`, `getSelectedIndex()`, `getSelectedText()`, `setSelectedIndex(int)`।
> पॉपअप स्क्रीन पर उपलब्ध स्थान के अनुसार स्वयं तय करता है कि वह ड्रॉपडाउन के **ऊपर या नीचे**
> खुलेगा, और बाहर टैप करने पर बंद हो जाता है। कॉलबैक `onSelect`, `selectedIndex`/`text` के
> पहले ही अपडेट हो जाने के **बाद** चलता है, इसलिए इसके अंदर
> `getSelectedText()` को कॉल करना सुरक्षित है।

## गहराई से जानें
- विजेट पृष्ठ: [Dropdown](/docs/ui/widgets/dropdown) · कैननिकल स्रोत: अध्याय 14
- मार्कर के साथ एकल/बहु चयन: [checkbox-e-radio.md](/docs/cookbook/ui/checkbox-e-radio)
