यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
हल्का/गहरा मोड
CrossFly हल्के और गहरे के बीच रीयल-टाइम में और यथास्थान बदलता है — स्क्रीन फिर से बनाए बिना। कुंजी है
Styles.setDarkMode(...), उन स्टाइल्स के साथ मिलकर जो थीम से फिर से हल हो जाते हैं।
पूरा उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.style.*; // Styles, ThemeMode, LabelRole
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
Styles.setColorScheme(0xFF6750A4, ThemeMode.LIGHT); // बेस पैलेट (लाइट/डार्क का अनुसरण करती है)
setLayout(new VerticalLayout());
// styled(...) हर थीम बदलाव पर स्टाइल पुनर्मूल्यांकित करता है (मोड अनुसार स्वतः re-skin)
Label titulo = new Label("Bem-vindo")
.styled(() -> Styles.theme().label(LabelRole.TITLE));
add(LAY_AUTO, titulo);
// Switch मोड बदलता है; setDarkMode खुद खुली पूरी UI को फिर से सजाता है।
Switch alternar = new Switch("Modo escuro");
alternar.onAction(c -> Styles.setDarkMode(alternar.isChecked()));
add(LAY_AUTO, alternar);
}
}
नीचे दिए गए स्निपेट सिर्फ़ मूल भाग दिखाते हैं (जो
onShow()के अंदर जाता है)। चलाने के लिए, इन्हें ऊपर वालेMainWindowकंकाल में रखें।
स्वचालित तरीका (अनुशंसित)
- स्टाइल्स में थीम के
PalColorका उपयोग करें (Styles.textColor,cs.surface) — वे स्वयं फिर से हल हो जाते हैं। setDarkMode(...)कॉल करें:
Styles.toggleDarkMode(); // लाइट ↔ डार्क बदलता है
Styles.setDarkMode(true); // डार्क बाध्य करता है
boolean escuro = Styles.isDarkMode(); // वर्तमान स्थिति
setDarkMode(...) पहले से ही सभी खुली खिड़कियों में थीम को स्वचालित रूप से फिर से लागू करता है (आंतरिक रूप से
restyleAll() को ट्रिगर करता है), इसलिए PalColor से जुड़े स्टाइल बिना किसी अतिरिक्त कोड के रंग बदलते हैं।
मोड पर निर्भर स्टाइल → styled(...) / onRestyle(...)
जब स्टाइल मोड के अनुसार रूप बदलता है (केवल रंग नहीं), तो पंजीकृत करें कि कॉम्पोनेंट को कैसे फिर से स्टाइल होना चाहिए। कॉलबैक तत्काल एक बार चलता है और हर थीम बदलाव पर फिर से चलता है:
Label titulo = new Label("Bem-vindo")
.styled(() -> Styles.theme().label(LabelRole.TITLE)); // हर थीम बदलाव पर पुनर्मूल्यांकित
// स्टाइल से परे तर्क के लिए (आइकन glyph बदलना, चार्ट रंग, आदि):
Label l = new Label("Status");
l.onRestyle(() -> l.style(Styles.isDarkMode() ? estiloEscuro : estiloClaro));
किसी उप-वृक्ष (subtree) का मैन्युअल री-स्किन
यदि आपने थीम को गैर-वैश्विक तरीके से बदला (उदा.: केवल एक पैनल), तो पुनः लागू करने के लिए बाध्य करें:
window.restyle(); // पेड़ के सभी onRestyle फिर से चलाता है और repaint करता है, बिना कॉम्पोनेंट पुनः बनाए
पूरा प्रवाह
Switch alternar = new Switch("Modo escuro");
alternar.onAction(c -> Styles.setDarkMode(alternar.isChecked())); // पूरी UI साथ चलती है
सर्वोत्तम अभ्यास
- स्थिर रंगों की तुलना में थीम के
PalColorको प्राथमिकता दें — गहरा मोड स्वचालित हो जाता है। - मोड के अनुसार संरचना बदलने वाले स्टाइल्स के लिए
styled(...)का उपयोग करें (onRestyleसे अधिक संक्षिप्त)। - स्टाइल्स बनाते समय मोड को
Styles.isDarkMode()/Styles.themeMode()से पढ़ें।
आम गलतियाँ
- स्थिर रंग (
0xFF...) रखना और फिर गहरे मोड के लिए स्क्रीन को हाथ से फिर से बनाना पड़ना। - थीम बदलते समय पूरी UI को फिर से बनाना —
restyle()/styled(...)का उपयोग करें और कॉम्पोनेंट्स को फिर से इस्तेमाल करें।