मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

ListViewWindow

ListViewWindow एक ListView को एक Window के अंदर लपेटता है ताकि मोडल पॉपअप व्यवहार (केंद्रित तैरता हुआ सेलेक्टर) मिले। SINGLE मोड में, किसी आइटम को टच करना चयन करता है और विंडो को बंद कर देता है; MULTIPLE में, “पुष्टि करें” बटन बंद करता है।

अधिकांश मेथड केवल आंतरिक ListView को डेलिगेट करते हैं (कॉन्फ़िगरेशन और चयन पूछताछ)। यदि आप पॉपअप के बिना एम्बेडेड ListView चाहते हैं तो getPanel() का उपयोग करें।

🟡 · पैकेज: dev.crossfly.ui · एक्सटेंड करता है: Window · स्टाइल: WindowStyle (selectionWindowStyle() के माध्यम से)

कब उपयोग करें

  • मोडल चयन जो प्रवाह को बाधित करता है (क्रियाओं का मेनू, आइटम सेलेक्टर, विकल्पों की पुष्टि)।
  • आप बिना Window को हाथ से बनाए स्वचालित केंद्रीकरण और स्क्रीन के सापेक्ष आकार चाहते हैं।

कब उपयोग न करें

  • किसी स्क्रीन में एम्बेडेड सूची (गैर-मोडल) → सीधे ListView का उपयोग करें (या getPanel())।
  • हज़ारों आइटम → अपनी खुद की Window के अंदर VirtualListView का उपयोग करें।

दिखावट

स्क्रीन का एक अंश घेरती हुई केंद्रित विंडो (widthRatio/heightRatio, डिफ़ॉल्ट 0.5/0.5), जिसमें ListView (हेडर + स्क्रॉल करने योग्य आइटम + MULTIPLE में बटन) होता है। बैकग्राउंड WindowStyle/Skin के अनुसार गहरा हो जाता है।

पूरा उदाहरण (कॉपी करें, पेस्ट करें और चलाएं)

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());

      // ListViewWindow एक Window (popup) है: show() से खुलता है, layout में नहीं आता।
      Button abrir = new Button("Escolher vibração");
      abrir.onAction(e -> {
         ListViewWindow pm = new ListViewWindow("Vibrar",
            new String[]{"Curto", "Longo", "Padrão"}, ListViewWindow.ItemType.SINGLE);
         pm.onConfirm(c -> System.out.println("idx = " + pm.getSelectedIndex()));
         pm.show();
      });

      add(.9f, abrir);   // popup खोलने वाला बटन layout में आता है
   }
}

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

बुनियादी उपयोग

// मेनू पॉपअप (SINGLE): छूने पर बंद होता है और इंडेक्स रिपोर्ट करता है
ListViewWindow pm = new ListViewWindow("Vibrar", new String[]{"Curto", "Longo", "Padrão"},
      ListViewWindow.ItemType.SINGLE);
pm.onConfirm(c -> System.out.println("idx = " + pm.getSelectedIndex()));
pm.show();

कंस्ट्रक्टर

कंस्ट्रक्टर विवरण
ListViewWindow(String[] items, ItemType itemType) बिना शीर्षक वाला पॉपअप
ListViewWindow(String title, String[] items, ItemType itemType) हेडर में शीर्षक वाला पॉपअप

ListViewWindow.ItemType एक अपना enum है (SINGLE, MULTIPLE) जो आंतरिक रूप से ListView.ItemType में परिवर्तित हो जाता है।

प्रॉपर्टीज़ और अनुकूलन

प्रॉपर्टी / मेथड प्रकार डिफ़ॉल्ट क्या करता है
size(float widthRatio, float heightRatio) ListViewWindow 0.5, 0.5 स्क्रीन के अंश के रूप में पॉपअप का आकार
getPanel() ListView — आंतरिक ListView तक पहुंच
ItemFactory(ItemFactory) ListViewWindow null कस्टम पंक्तियों की फ़ैक्ट्री (आरंभिक अक्षर बड़ा नोट करें)
computeIdealHeight(int) int — panel.computeIdealHeight को डेलिगेट करता है
title/confirmText/itemStyle/confirmButtonStyle/headerStyle ListViewWindow थीम ListView को धाराप्रवाह डेलिगेशन

चयन पूछताछ (डेलिगेटेड)

getSelectedCount(), getSelectedIndex(), getSelectedText(), getSelectedIndices(), getSelectedTexts(), isSelected(int), getSelectionState()।

कॉलबैक और इवेंट

कॉलबैक कब ट्रिगर होता है
onConfirm(Component.Action) SINGLE: किसी आइटम को टच करने पर (और बंद हो जाता है)। MULTIPLE: “पुष्टि करें” को टच करने पर (और बंद हो जाता है)

स्थितियां

हर Window की तरह: प्रदर्शित करने के लिए show() और बंद करने के लिए hide() का उपयोग करें। आंतरिक ListView अपना closeAction पहले से ही this::hide की ओर इंगित करता है, इसलिए चयन स्वचालित रूप से पॉपअप को बंद कर देता है।

पंक्ति फ़ैक्ट्री (छवि + लेबल) वाला पॉपअप

Button abrir = new Button("Lista de imagens");
abrir.onAction(e -> {
   ListViewWindow w = new ListViewWindow("Imagens", labels, ListViewWindow.ItemType.SINGLE);
   w.ItemFactory((text, index) -> {
      Image img = new Image(paths[index]);
      ImageView iv = new ImageView(img, UIConstants.ImageSize.RATIO);
      Component row = new Component().style(Styles.component()
         .pressable().ingap(Gap.ofFont(.3f)).autoHeight(Relative.ofFont(3f)));
      row.setLayout(new GridLayout(Position.START, Position.CENTER));
      row.add(.22f, .78f, iv, new Label(text));
      return row;
   });
   w.show();
});

कस्टम आकार वाला बहु-चयन

ListViewWindow w = new ListViewWindow("Tópicos",
      new String[]{"Java", "Kotlin", "Dart"}, ListViewWindow.ItemType.MULTIPLE)
   .size(.7f, .6f)
   .confirmText("OK");
w.onConfirm(c -> System.out.println(w.getSelectedCount() + " marcados"));
w.show();

सर्वोत्तम अभ्यास

  • सामग्री के अनुसार size(...) समायोजित करें — कई आइटम बड़े heightRatio की मांग करते हैं; कम आइटम, छोटे।
  • उसी सूची को पॉपअप के बिना एम्बेड करने के लिए, getPanel() कॉल करें और लौटाए गए ListView को अपने लेआउट में जोड़ें।

सामान्य गलतियां

  • ItemFactory(...) (मेथड, बड़ा I) को ListView के itemFactory(...) के साथ भ्रमित करना — यहां धाराप्रवाह मेथड क्लास की परिपाटी के अनुसार बड़े अक्षर से शुरू होता है।
  • गलत enum का उपयोग करना — ListViewWindow में ListViewWindow.ItemType पास करें, ListView.ItemType नहीं।

यह भी देखें

क्या यह पृष्ठ उपयोगी था?