यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
किसी स्क्रीन को कैसे खोलें और बंद करें
उद्देश्य. CrossFly में कोई “रूट्स” नहीं हैं: हर स्क्रीन एक Window है और नेविगेशन एक स्टैक है। किसी स्क्रीन को खोलना show() है (push); वापस जाना hide() है (pop)। स्क्रीन की UI को onShow() में बनाया जाना चाहिए।
उपयोग की गई APIs
Window.show()— विंडो कोEventsProcessorमें स्टैक पर चढ़ाता है औरonShow()कॉल करता है (push)। यदि paint thread के बाहर से बुलाया जाए, तो यह शेड्यूल करता है और प्रतीक्षा करता है।Window.hide()— विंडो को स्टैक से उतारता है औरonRemove()कॉल करता है (pop)। यदि कोई हो तो उल्टा ट्रांज़िशन ट्रिगर करता है।Window.onShow()— फ्रेमवर्क द्वारा स्टैक पर चढ़ाते समय बुलाया गया जीवनचक्र हुक; UI यहाँ बनाएँ। हमेशा पहलेsuper.onShow()कॉल करें (यह bounds को पुनर्गणना करता है औरonAdd(true)कॉल करता है)।EventsProcessor.topWindow()— स्टैक के शीर्ष की विंडो लौटाता है (जो ईवेंट प्राप्त करती है)।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
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());
add(new Label("Tela inicial"));
add(new Button("Abrir detalhe").onAction(e -> new OutraTela().show())); // push
}
}
/** स्टैक की गई स्क्रीन; "Voltar" बटन pop (hide) करता है और MainWindow पर लौटता है। */
class OutraTela extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow(); // अनिवार्य: bounds की पुनर्गणना करता है और onAdd() ट्रिगर करता है
setLayout(new VerticalLayout());
add(new Label("Detalhe do pedido"));
add(new Button("Voltar").onAction(e -> hide())); // pop: पिछली स्क्रीन पर लौटता है
}
}
नीचे का अंश केवल मुख्य भाग दिखाता है। इसे चलाने के लिए, इसे ऊपर दिए
MainWindowढाँचे में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: Window.show()/hide()/onShow(); super.onShow() updateBounds()+onAdd(true) करता है
public class MinhaTela extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow(); // अनिवार्य: bounds की पुनर्गणना करता है और onAdd() ट्रिगर करता है
setLayout(new GridLayout());
add(new Label("Detalhe do pedido"));
add(new Button("Voltar").onAction(e -> hide())); // pop: पिछली स्क्रीन पर लौटता है
}
}
// कहीं भी (उदा.: पिछली स्क्रीन के एक बटन के onAction में):
new MinhaTela().show(); // push: स्टैक करता है और दिखाता है
बग से बचाने वाले नियम:
- कभी भी UI को कंस्ट्रक्टर में न बनाएँ जो स्क्रीन के आकार पर निर्भर हो —
Screen.width/heightकेवल तब स्थिर होता है जबonShow()चलता है।onShow()का उपयोग करें। hide()स्वयं की विंडो बंद करता है। बाहर से शीर्ष विंडो बंद करने के लिए,EventsProcessor.topWindow().hide()का उपयोग करें।show()paint thread के बाहर सुरक्षित है: यह painting thread पर पुनर्निर्देशित करता है और प्रतीक्षा करता है।
और गहराई में जाएँ
क्या यह पृष्ठ उपयोगी था?प्रतिक्रिया के लिए धन्यवाद!