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

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

किसी स्क्रीन से परिणाम कैसे प्राप्त करें

उद्देश्य। आप उपयोगकर्ता के लिए कुछ चुनने/भरने हेतु एक स्क्रीन खोलते हैं और आपको वापस मान चाहिए। CrossFly में दो अलग-अलग तंत्र हैं: pickers के लिए show(onAnswer), और सामान्य स्क्रीन के लिए कंस्ट्रक्टर में callback।

उपयोग की गई APIs

  • Window.show(RunnableWith<Object> onAnswer) — परिणाम का एक callback पंजीकृत करता है। स्रोत में, callback केवल तभी चलता है जब getAnswer() != null, और Window.getAnswer() डिफ़ॉल्ट रूप से null लौटाता है — केवल Picker ही getAnswer() को ओवरराइड करता है। यानी: सामान्य स्क्रीन के लिए यह callback कभी नहीं चलता।
  • Picker.getAnswer() — चुना गया मान लौटाता है, या रद्द होने पर null। केवल pickers ही इसे लागू करते हैं।
  • कंस्ट्रक्टर में callback — सामान्य स्क्रीन के लिए मानक तरीका: स्क्रीन के कंस्ट्रक्टर को एक RunnableWith<T> (या अपना कोई इंटरफ़ेस) पास करें और hide() से पहले उसे invoke करें।

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

package com.exemplo;

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

/** मुख्य निष्पादन योग्य स्क्रीन: चयन स्क्रीन खोलती है और कंस्ट्रक्टर में callback के जरिए परिणाम प्राप्त करती है। */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      add(new Label("Nenhum cliente escolhido"));
      add(new Button("Escolher cliente").onAction(e ->
         // सामान्य स्क्रीन — कंस्ट्रक्टर में callback के जरिए परिणाम (यहां show(onAnswer) काम नहीं करता)।
         new SelecionarClienteTela(cliente -> Hint.show("Escolhido: " + cliente.nome, 1500)).show()));
   }
}

/** सरल उदाहरण मॉडल। */
class Cliente
{
   final String nome;
   Cliente(String nome) { this.nome = nome; }
}

/** चयन स्क्रीन: बंद होने से पहले कंस्ट्रक्टर callback के जरिए परिणाम देती है। */
class SelecionarClienteTela extends Window
{
   private final RunnableWith<Cliente> onPick;

   public SelecionarClienteTela(RunnableWith<Cliente> onPick) { this.onPick = onPick; }

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());
      add(new Button("Escolher Ana").onAction(e ->
      {
         if (onPick != null) onPick.run(new Cliente("Ana"));  // परिणाम देता है
         hide();                                              // फिर बंद करता है
      }));
   }
}

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

न्यूनतम अंश

// स्रोत में सत्यापित: hide() केवल तभी onAnswer.run(answer) कॉल करता है जब (this instanceof Picker) और answer != null

// 1) PICKER — show(onAnswer) का उपयोग करता है। केवल गैर-null परिणाम (पुष्टि किए गए चयन) पर फायर होता है।
DatePicker picker = new DatePicker(/* ... */);
picker.show(answer ->
{
   Date d = (Date) answer;      // यहां कभी null नहीं होता; रद्द करने पर callback फायर नहीं होता
   Hint.show("Data: " + d, 1500);
});

// 2) सामान्य स्क्रीन — कंस्ट्रक्टर में callback के जरिए परिणाम (यहां show(onAnswer) काम नहीं करता)।
public class SelecionarClienteTela extends Window
{
   private final RunnableWith<Cliente> onPick;

   public SelecionarClienteTela(RunnableWith<Cliente> onPick) { this.onPick = onPick; }

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new GridLayout());
      add(new Button("Escolher Ana").onAction(e ->
      {
         if (onPick != null) onPick.run(new Cliente("Ana"));  // परिणाम देता है
         hide();                                              // फिर बंद करता है
      }));
   }
}

// कॉल:
new SelecionarClienteTela(cliente -> Hint.show("Escolhido: " + cliente.nome, 1500)).show();

दो रास्ते क्यों? hide() onAnswer को केवल Picker के लिए कॉल करता है (instanceof Picker जाँच Window.hide() के कोड में है)। सामान्य स्क्रीन के लिए, कंस्ट्रक्टर का callback स्पष्ट अनुबंध है — और यह Object के बजाय परिणाम को टाइप (RunnableWith<Cliente>) करने की अनुमति देता है।

और गहराई में जाएँ

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