यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
LocationView
LocationView एक विजेट है जो GPS डेटा को टेक्स्ट के रूप में प्रदर्शित करता है: अक्षांश और देशांतर (N/S और E/W प्रत्यय के साथ अंश/मिनट/सेकंड में), fix का समय, गति, दिशा और उपग्रहों की संख्या। यह समय-समय पर एक Location (GPS स्रोत — COM/Bluetooth/IR पोर्ट या नेटिव API) से पढ़ता है और एक VerticalLayout में ढेर किए गए पाँच Label को अपडेट करता है।
यह मानचित्र नहीं बनाता — केवल संख्याएं दिखाता है। डिवाइस की स्थिति पर मानचित्र को केंद्रित करने के लिए, Map का उपयोग करें (देखें अध्याय 25)।
🟡 · पैकेज:
dev.crossfly.ui· एक्सटेंड करता है:Component· डेटा स्रोत:dev.crossfly.device.Location
कब उपयोग करें
- डिवाइस के वर्तमान निर्देशांक टेक्स्ट में दिखाना (डायग्नोस्टिक, HUD, GPS स्टेटस स्क्रीन)।
- टाइमर लूप लिखे बिना स्थिति की स्वचालित आवधिक रीडिंग प्राप्त करना।
कब उपयोग न करें
- मानचित्र रेंडर करना या स्थिति को दृश्य रूप में चिह्नित करना →
Mapका उपयोग करें (अध्याय 25)। - बिना UI के केवल एक बार कोड में स्थिति पढ़ना → सीधे
Locationक्लास का उपयोग करें।
दिखावट
पाँच टेक्स्ट लाइनें (lat, lon, fix, speed, direction), बाईं ओर संरेखित, एक VerticalLayout में। जब तक डेटा नहीं होता, “Location Initialising” दिखाता है; बिना सिग्नल के, स्थानीयकरण योग्य स्ट्रिंग्स LAT_LOW_SIGNAL / LON_LOW_SIGNAL दिखाता है।
पूरा उदाहरण (कॉपी करें, पेस्ट करें और चलाएं)
LocationView एक सामान्य कंपोनेंट है: यह add(LAY_AUTO, ...) के साथ सीधे स्क्रीन में जाता है। कंस्ट्रक्टर throws IOException घोषित करता है, जो onShow() throws Exception द्वारा पहले से ही कवर है। टाइमर onAdd में शुरू होता है और onRemove में रुकता है — इसे मैन्युअल रूप से प्रबंधित करने की आवश्यकता नहीं है।
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(LAY_AUTO, new Label("Coordenadas do GPS:"));
LocationView gps = new LocationView(1000); // हर 1 s पर पढ़ता है; throws IOException
gps.onAction(c -> {}); // हर आवधिक रीडिंग पर ट्रिगर होता है (वैकल्पिक)
add(LAY_AUTO, gps);
// timer onAdd में शुरू होता है और onRemove में स्वचालित रूप से रुक जाता है।
}
}
नीचे दिए गए स्निपेट केवल मुख्य भाग दिखाते हैं (जो
onShow()के अंदर जाता है)। चलाने के लिए, उन्हें ऊपर केMainWindowढांचे में रखें।
बुनियादी उपयोग
LocationView gps = new LocationView(1000); // हर 1 s पर पढ़ता है; throws IOException
container.add(LAY_AUTO, gps);
// स्क्रीन छोड़ते समय, onRemove timer को रोक देता है; या gps.stop() कॉल करें।
कंस्ट्रक्टर
| कंस्ट्रक्टर | विवरण |
|---|---|
LocationView() |
2000 ms का रीडिंग अंतराल, location = null। throws IOException। |
LocationView(int readInterval) |
कस्टम अंतराल (ms; प्रभावी न्यूनतम 100), location = null। throws IOException। |
LocationView(Location location, int readInterval) |
स्पष्ट GPS स्रोत + अंतराल। throws IOException। |
प्रॉपर्टीज़ और अनुकूलन
| मेथड / फ़ील्ड | प्रकार | क्या करता है |
|---|---|---|
location |
Location (फ़ील्ड) |
GPS डेटा स्रोत; कंस्ट्रक्टर में पास किया जा सकता है या null रह सकता है। |
stop() |
void |
टाइमर को रोकता है और location.stop() कॉल करता है। throws IOException। |
retrieveGPSData() |
void |
स्थिति पढ़ता है और लेबल अपडेट करता है (टाइमर द्वारा कॉल किया गया)। |
getAutoHeight() |
int |
पसंदीदा ऊंचाई = font.scaledHeight() * 5 + ingap.height()। |
LocationView.LAT_LOW_SIGNAL |
स्टैटिक String |
अक्षांश प्राप्त न होने पर प्रदर्शित टेक्स्ट (स्थानीयकरण योग्य)। |
LocationView.LON_LOW_SIGNAL |
स्टैटिक String |
देशांतर प्राप्त न होने पर प्रदर्शित टेक्स्ट (स्थानीयकरण योग्य)। |
कॉलबैक और इवेंट
| कॉलबैक | कब ट्रिगर होता है |
|---|---|
onAction(Action) |
प्रत्येक आवधिक रीडिंग पर (retrieveGPSData() runActions() कॉल करता है), सिग्नल के साथ या बिना। इसे अपडेट सूचना बिंदु के रूप में उपयोग करें। |
स्थितियां
- आरंभ हो रहा है: पहले fix से पहले, “Location Initialising” दिखाता है।
- सिग्नल के साथ: lat/lon को अंश/मिनट/सेकंड में, fix का समय (12/24 घंटे का प्रारूप
LocaleFormats.is24Hourसे आता है), गति/दिशा जब!= Location.INVALIDऔर उपग्रह जब> 0। - बिना सिग्नल के:
LAT_LOW_SIGNAL/LON_LOW_SIGNALऔर अंतिम लाइन में विफलता का कारण दिखाता है। - जीवनचक्र: टाइमर
onAddमें शुरू होता है औरonRemoveमें (याstop()द्वारा) रुक जाता है, संसाधन मुक्त करते हुए।
स्पष्ट GPS स्रोत + प्रत्येक अपडेट पर प्रतिक्रिया
Location fonte = /* प्लेटफॉर्म से प्राप्त / dev.crossfly.device */;
LocationView gps = new LocationView(fonte, 1000);
gps.onAction(c -> atualizarStatusBarra()); // हर रीडिंग पर ट्रिगर होता है
container.add(LAY_AUTO, gps);
// कम सिग्नल के संदेश खोजें:
LocationView.LAT_LOW_SIGNAL = "lat: sem sinal";
LocationView.LON_LOW_SIGNAL = "lon: sem sinal";
सर्वोत्तम अभ्यास
- जीवनचक्र को टाइमर संभालने दें: विजेट जोड़ना इसे शुरू करता है, हटाना इसे रोकता है। यदि आपको पहले
Locationमुक्त करना हो तो ही स्पष्ट रूप सेstop()कॉल करें। - आवश्यकता के अनुसार
readIntervalसमायोजित करें — छोटे अंतराल अधिक बैटरी खर्च करते हैं; प्रभावी न्यूनतम 100 ms है।
सामान्य गलतियां
- कंस्ट्रक्टर के
throws IOExceptionको भूल जाना। - मानचित्र की उम्मीद करना:
LocationViewकेवल टेक्स्ट दिखाता है; दृश्यीकरण के लिएMapका उपयोग करें। - समयक्षेत्र के बिना स्थानीय समय मानना: fix को समयक्षेत्र के ऑफ़सेट द्वारा
TimeZone.getDefault().getRawOffset()से समायोजित किया जाता है।
यह भी देखें
- क्षेत्र गाइड:
ui/· रेसिपी:cookbook/ - अवधारणा (i18n, locale प्रारूप):
concepts/ - संबंधित कंपोनेंट:
webcontainer