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

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

स्क्रीनों के बीच नेविगेट करना

आप क्या सीखेंगे

  • एक नई स्क्रीन पर आगे बढ़ना (show()) और वापस जाना (hide())।
  • गंतव्य स्क्रीन को डेटा भेजना।
  • प्रत्येक स्क्रीन की UI कहाँ बनाएँ।

पूर्वापेक्षाएँ

समझें कि हर स्क्रीन Window की एक सबक्लास है और UI onShow() में बनाई जाती है।

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

package com.exemplo;

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

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

      add(LAY_AUTO, new Label("Lista"));

      Button abrir = new Button("Abrir detalhe do item 42");
      abrir.onAction(c -> new TelaDetalhe(42).show());   // push (आगे) — डेटा कंस्ट्रक्टर द्वारा
      add(LAY_AUTO, abrir);
   }
}

/** दूसरी स्क्रीन: कंस्ट्रक्टर द्वारा id पाती है और hide() से लौटती है। */
class TelaDetalhe extends Window
{
   private final int id;

   public TelaDetalhe(int id) { this.id = id; }   // डेटा कंस्ट्रक्टर द्वारा आता है

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      add(LAY_AUTO, new Label("Detalhe do item " + id));

      Button voltar = new Button("Voltar");
      voltar.onAction(c -> hide());   // pop (वापस)
      add(LAY_AUTO, voltar);
   }
}

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

आगे बढ़ना (push) और वापस जाना (pop)

public class TelaLista extends Window {
   @Override public void onShow() throws Exception {
      super.onShow();
      setLayout(new VerticalLayout());
      Button abrir = new Button("Abrir detalhe");
      abrir.onAction(c -> new TelaDetalhe(42).show());   // push (आगे)
      add(LAY_AUTO, abrir);
   }
}

public class TelaDetalhe extends Window {
   private final int id;
   public TelaDetalhe(int id) { this.id = id; }          // डेटा कंस्ट्रक्टर द्वारा आता है
   @Override public void onShow() throws Exception {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_AUTO, new Label("Detalhe do item " + id));
      Button voltar = new Button("Voltar");
      voltar.onAction(c -> hide());                       // pop (वापस)
      add(LAY_AUTO, voltar);
   }
}

अगली स्क्रीन को डेटा भेजना

कोई “रूट आर्गुमेंट” नहीं हैं। गंतव्य Window के कंस्ट्रक्टर के माध्यम से भेजें (जैसे ऊपर id)। ऑब्जेक्ट के लिए, संदर्भ भेजें: new TelaCliente(cliente).show();।

UI कहाँ बनाएँ

  • onShow() (super.onShow() के साथ): यहाँ Screen.width/height और विंडो के बाउंड्स पहले से मान्य हैं।
  • कंस्ट्रक्टर में न बनाएँ — बाउंड्स तैयार नहीं हो सकते।

अच्छे तौर-तरीके

  • डेटा को पेंट थ्रेड के बाहर लोड करें और UI भरने के लिए Component.onUI(...) के साथ वापस आएँ।
  • onRemove() में संसाधन (टाइमर, कर्सर) मुक्त करें।

आम गलतियाँ

  • कंस्ट्रक्टर में UI बनाना (अमान्य बाउंड्स) या super.onShow() भूल जाना।
  • “नामित आर्गुमेंट वाले बैक-स्टैक” की उम्मीद करना — डेटा कंस्ट्रक्टर के माध्यम से भेजें।

यह भी देखें

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