# मोडल चयन पॉपअप कैसे दिखाएँ

> ItemFactory के जरिए कस्टम पंक्तियों के साथ किसी सूची को केंद्रित मोडल विंडो के रूप में खोलें।

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

# मोडल चयन पॉपअप कैसे दिखाएँ

**उद्देश्य.** किसी चयन सूची को **फ्लोटिंग विंडो** के रूप में खोलें (लेआउट में एम्बेडेड नहीं)।
`ListViewWindow` एक `ListView` को एक `Window` के अंदर लपेटता है, उसे स्क्रीन पर केंद्रित करता है और
जब उपयोगकर्ता चयन करता है तब उसे स्वयं बंद कर देता है। यह सरल चयन और कस्टम दिखावट वाली पंक्तियों —
दोनों के लिए काम करता है।

## उपयोग की गई APIs
- `new ListViewWindow(String[] items, ListViewWindow.ItemType type)` — पॉपअप बनाता है; `String title` वाला ओवरलोड भी उपलब्ध है।
- `ListViewWindow.ItemType.SINGLE` / `MULTIPLE` — `ListViewWindow` का **अपना enum** (`ListView.ItemType` का उपनाम, जो आंतरिक रूप से `toPanel()` द्वारा परिवर्तित होता है)।
- `ListViewWindow.size(float widthRatio, float heightRatio)` — स्क्रीन के अंश के रूप में आकार (defaults `0.5f`, `0.5f`); पॉपअप हमेशा केंद्रित रहता है।
- `ListViewWindow.onConfirm(Component.Action)` — आंतरिक `ListView` को सौंपता है; SINGLE में पुष्टि करने पर विंडो `closeAction(this::hide)` के जरिए स्वयं बंद हो जाती है।
- `ListViewWindow.ItemFactory(ItemFactory factory)` — **ध्यान दें: मेथड बड़े अक्षर से शुरू होता है**। इंटरफ़ेस है `ItemFactory { Component create(String text, int index) throws Exception; }`।
- `ListViewWindow.show()` / `hide()` — `Window` से विरासत में मिले (`EventsProcessor` में स्टैक पर चढ़ाते/उतारते हैं)।
- `ListViewWindow.getSelectedText()` / `getSelectedIndex()` / `getSelectedTexts()` — आंतरिक पैनल को सौंपे गए।
- `ListViewWindow.getPanel()` — यदि उन्नत कॉन्फ़िगरेशन चाहिए तो अंतर्निहित `ListView` तक पहुँच।

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

      final String[] paises = {"Brasil", "Portugal", "Angola", "Moçambique"};

      // ListViewWindow popup है: लेआउट में नहीं आता — एक Button द्वारा ट्रिगर किए गए show() से खुलता है
      Button abrir = new Button("Escolher país");
      abrir.onClick(e ->
      {
         ListViewWindow popup = new ListViewWindow("País", paises, ListViewWindow.ItemType.SINGLE);
         popup.size(.6f, .5f);                 // स्क्रीन की 60% चौड़ाई, 50% ऊँचाई
         popup.onConfirm(ev ->
         {
            String pais = popup.getSelectedText();   // विंडो SINGLE में स्वयं ही बंद हो जाती है
            Debug.log("País: " + pais);
            return null;
         });
         popup.show();                          // केंद्रित modal खोलता है
         return null;
      });

      add(LAY_AUTO, abrir);
   }
}
```

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

## न्यूनतम अंश
```java
// स्रोत में सत्यापित: ListViewWindow.java
String[] paises = {"Brasil", "Portugal", "Angola", "Moçambique"};

ListViewWindow popup = new ListViewWindow("País", paises, ListViewWindow.ItemType.SINGLE);
popup.size(.6f, .5f);                 // स्क्रीन की 60% चौड़ाई, 50% ऊँचाई
popup.onConfirm(e ->
{
   String pais = popup.getSelectedText();   // विंडो SINGLE में स्वयं ही बंद हो जाती है
   return null;
});
popup.show();                          // केंद्रित modal खोलता है
```

`ItemFactory` के साथ कस्टम पंक्तियाँ (मेथड के नाम में **बड़े `I`** पर ध्यान दें):

```java
// स्रोत में सत्यापित: ListViewWindow.ItemFactory (interface) + ItemFactory(...) मेथड
ListViewWindow popup = new ListViewWindow("Contato", nomes, ListViewWindow.ItemType.SINGLE);
popup.ItemFactory((text, index) ->
{
   Component linha = new Component();
   linha.setLayout(new GridLayout());
   linha.add(new Label(text));                 // पंक्ति को जैसे चाहें बनाएँ
   return linha;
});
popup.onConfirm(e -> { /* ... */ return null; });
popup.show();
```

> Javadoc × कोड में अंतर: क्लास के Javadoc में एक `ListView` पर `sel.show()` दिखाया गया है, परंतु
> `show()`/`hide()` `Window` में मौजूद हैं — इसलिए ये `ListViewWindow` में हैं, `ListView` में नहीं। पॉपअप
> मोड के लिए हमेशा `ListViewWindow` का उपयोग करें।

## और गहराई में जाएँ
- उसी सूची का एम्बेडेड (बिना विंडो वाला) संस्करण: [lista-simples.md](/docs/cookbook/lists/lista-simples)।
- विजेट गाइड: [ListViewWindow](/docs/ui/widgets/listviewwindow) · आधिकारिक स्रोत: अध्याय 15
