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

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

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
क्या यह पृष्ठ उपयोगी था?