Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

JavaFXطريقة تغيير فورمات التاريخ الذي يختاره المستخدم في الـDatePicker

إفتراضياً, الـ DatePicker يستخدم الفورمات MM/dd/yyyy لذلك تلاحظ أنه يعرض التاريخ كالتالي: السنة/اليوم/الشهر

المثال التالي يعلمك طريقة تغيير شكل (فورمات) التاريخ الذي يظهر بداخل مربع النص الخاص بالـ DatePicker.
فعلياً, سننشئ الفورمات التالية d-M-Y و نطبقها على الـ DatePicker لعرض التاريخ الذي يختاره المستخدم كالتالي: السنة-الشهر-اليوم


مثال

Main.java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.stage.Stage;
import javafx.util.StringConverter;

public class Main extends Application {

    // ليظهر كالتالي:   سنة - شهر - يوم datePicker سنستخدمه لتحديد الطريقة التي سيظهر بها التاريخ بداخل الكائن pattern المتغير
    final String pattern = "d-M-Y";

    // pattern هنا قمنا بتعريف دالة خاصة لإرجاع التاريخ الذي يختاره المستخدم بالشكل (الفورمات) الذي تم تحديده في المتغير
    public StringConverter dateFormatter() {
        StringConverter converter = new StringConverter<LocalDate>() {
            DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);
            @Override
            public String toString(LocalDate date) {
                if (date != null) {
                    return dateFormatter.format(date);
                }
                return "";
            }
            @Override
            public LocalDate fromString(String string) {
                if (string != null && !string.isEmpty()) {
                    return LocalDate.parse(string, dateFormatter);
                }
                return null;
            }
        };
        return converter;
    }

    @Override
    public void start(Stage stage) {

        // يمثل قائمة إختيار التاريخ التي نريد إضافتها في النافذة DatePicker هنا قمنا بإنشاء كائن من الكلاس
        DatePicker datePicker = new DatePicker();
        
        // pattern يظهر بالفورمات الذي يشير إليه الـ datePicker لها لجعل التاريخ الذي يظهر في الكائن dateFormatter() و تمرير الدالة setConverter() هنا قمنا باستدعاء الدالة
        datePicker.setConverter(dateFormatter());
        
        // إذا كان فارغاً و سهم الكتابة غير موضوع فيه datePicker و الذي يمثل فورمات التاريخ, يظهر في الكائن pattern هنا قمنا بجعل النص المخزن في المتغير
        datePicker.setPromptText(pattern.toLowerCase());
        
        // في النافذة datePicker هنا قمنا بتحديد مكان ظهور الكائن
        datePicker.setTranslateX(140);
        datePicker.setTranslateY(30);

        // في النافذة datePicker هنا قمنا بتحديد حجم الـ
        datePicker.setPrefSize(120, 30);

        // في النافذة Root Node لأننا ننوي جعله الـ Group هنا قمنا بإنشاء كائن من الكلاس
        Group root = new Group();

        // root في الكائن datePicker هنا قمنا بإضافة الكائن
        root.getChildren().add(datePicker);

        // فيها و تحديد حجمها Node كأول root هنا قمنا بإنشاء محتوى النافذة مع تعيين الكائن
        Scene scene = new Scene(root, 400, 300);

        // هنا وضعنا عنوان للنافذة
        stage.setTitle("JavaFX DatePicker");

        // أي وضعنا محتوى النافذة الذي قمنا بإنشائه للنافذة .stage في كائن الـ scene هنا وضعنا كائن الـ
        stage.setScene(scene);

        // هنا قمنا بإظهار النافذة
        stage.show();
        
        // عند تشغيل التطبيق و بالتالي لجعل المستخدم يعرف فورمات التاريخ datePicker لضمان أن لا يكون سهم الكتابة موضوع بداخل الكائن requestFocus() هنا قمنا باستدعاء الدالة
        root.requestFocus();

    }

    // هنا قمنا بتشغيل التطبيق
    public static void main(String[] args) {
        launch(args);
    }

}

ستظهر لك النافذة التالية عند التشغيل.

تغيير طريقة ظهور التاريخ في ال DatePicker في javafx