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

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

DatePicker

DatePicker एक मासिक कैलेंडर में तारीख चुनता है, महीने और वर्ष के नेविगेशन तथा महीने/वर्ष के त्वरित चयन ग्रिड के साथ। यह पिकर पैटर्न का अनुसरण करता है: बंद होने पर show(onAnswer) द्वारा उपभोग किए गए getAnswer() के माध्यम से मान लौटाता है (देखें Picker)।

🟡 · पैकेज: dev.crossfly.ui.picker · विस्तार करता है: Picker · शैली: DatePickerStyle

कब उपयोग करें

  • कैलेंडर UI के साथ एक तारीख एकत्र करना (जन्मदिन, शेड्यूलिंग, नियत तिथि)।

कब उपयोग न करें

  • समय एकत्र करना → TimePicker का उपयोग करें।

दिखावट

शीर्षक पट्टी, महीने की पंक्ति (< Nome >), वर्ष की पंक्ति (< 2026 >) और दिनों की 6×7 कोशिकाओं की एक ग्रिड वाला कार्ड। इसका आकार Screen.minSize के ~90% पर होता है।

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

package com.exemplo;

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

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

      Button abrir = new Button("Escolher data");
      abrir.onAction(c ->
      {
         DatePicker dp = new DatePicker().title("Data de nascimento");
         dp.show(answer -> Hint.show("Data: " + (String) answer, 2000));
      });
      add(LAY_AUTO, abrir);
   }
}

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

बुनियादी उपयोग

DatePicker dp = new DatePicker();
dp.show(answer -> campoData.setText((String) answer));

कंस्ट्रक्टर

कंस्ट्रक्टर विवरण
DatePicker() बिना पैरामीटर; आज की तारीख से शुरू होता है।

गुण और अनुकूलन (fluent)

मेथड प्रकार डिफ़ॉल्ट क्या करता है
setDate(int year, int month, int day) वर्ष, महीना 0-आधारित, दिन 1-आधारित आज तारीख पूर्व-चयनित करता है।
title(String) String "Date Picker" शीर्षक पट्टी का टेक्स्ट।
yearRange(int before, int after) int, int 30, 10 वर्ष ग्रिड के लिए पहले/बाद के वर्ष।
style(DatePickerStyle) शैली skin कस्टम शैली।
getSelectedDay() int — चयनित दिन (1-आधारित)।
getDisplayYear() / getDisplayMonth() int — प्रदर्शित वर्ष / महीना (महीना 0-आधारित)।

कॉलबैक और इवेंट

कॉलबैक कब ट्रिगर होता है
onSelect(Action) किसी दिन को टैप करने पर (स्वयं DatePicker प्राप्त करता है)।
show(onAnswer) बंद होने पर, तारीख की String देता है (यदि पुष्टि की गई हो)।

getAnswer() तारीख को DateTimeUtils.formatDate के फ़ॉर्मेट में लौटाता है — क्रम (DMY/MDY/YMD) और विभाजक LocaleFormats पर निर्भर करते हैं, यह निश्चित dd/MM/yyyy नहीं है।

अवस्थाएँ

  • महीनों के बीच नेविगेट करने से selectedDay -1 पर रीसेट हो जाता है (जब तक उपयोगकर्ता न चुने, कोई दिन चिह्नित नहीं होता)।
  • अवस्था के अनुसार शैलियाँ: आज, चयनित, अन्य महीना, सामान्य (DatePickerStyle के माध्यम से)।

जन्मतिथि

DatePicker dp = new DatePicker()
   .title("Data de nascimento")
   .yearRange(100, 0)     // 100 साल पहले तक, भविष्य में कोई नहीं
   .setDate(2000, 0, 1);  // 01/Jan/2000 (महीना 0-based!)

dp.onSelect(p ->
{
   DatePicker d = (DatePicker) p;
   Debug.log("dia=" + d.getSelectedDay() + " mes=" + (d.getDisplayMonth() + 1));
});

dp.show(answer ->
{
   String data = (String) answer; // उदा.: LocaleFormats के अनुसार "01/01/2000"
   campoData.setText(data);
});

अच्छे तरीके

  • याद रखें कि setDate में month 0-आधारित है।
  • महीनों/दिनों के नामों को स्थानीयकृत करने के लिए, सार्वजनिक स्थिरांक MONTH_NAMES/MONTH_SHORT को फिर से असाइन करें।

सामान्य गलतियाँ

  • setDate में 1-आधारित महीना पास करना — जनवरी 0 है।
  • निश्चित फ़ॉर्मेट की अपेक्षा करना — आउटपुट LocaleFormats.dateFormat/dateSeparator का अनुसरण करता है।
  • yearRange को चयन के clamp के रूप में समझना — यह केवल वर्षों के नेविगेशन को सीमित करता है; प्रदर्शित महीने का कोई भी दिन चयन योग्य है।

यह भी देखें

  • क्षेत्र गाइड: ui/ · रेसिपी: cookbook/
  • पैटर्न का आधार: Picker
  • संबंधित घटक: TimePicker
क्या यह पृष्ठ उपयोगी था?