openplanning

Hướng dẫn và ví dụ JavaFX DatePicker

Xem thêm các chuyên mục:

Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook

1- JavaFX DatePicker


// Tạo một DatePicker chỉ định ngày được chọn.
checkInDatePicker = new DatePicker(LocalDate.of(1998, 10, 8));

// Sét ngày được chọn bởi phương thức setValue
checkInDatePicker.setValue(LocalDate.of(1998, 10, 8));

// Sét ngày nhỏ nhất chọn được trên bộ lịch.
checkInDatePicker.setValue(LocalDate.MIN);

// Sét ngày lớn nhất có thể chọn được trên bộ lịch
checkInDatePicker.setValue(LocalDate.MAX);

// Sét ngày được chọn là ngày hiện tại.
checkInDatePicker.setValue(LocalDate.now());
setShowWeekNumber

2- Ví dụ DatePicker

DatePickerDemo.java

package org.o7planning.javafx.datapicker;

import java.time.LocalDate;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class DatePickerDemo extends Application {

    @Override
    public void start(Stage stage) {

        DatePicker datePicker = new DatePicker();
        datePicker.setValue(LocalDate.of(2016, 7, 25));
        datePicker.setShowWeekNumbers(true);

        FlowPane root = new FlowPane();
        root.getChildren().add(datePicker);
        root.setPadding(new Insets(10));

        stage.setTitle("DatePicker (o7planning.org)");
        Scene scene = new Scene(root, 300, 200);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }

}
Chạy ví dụ:

3- Tùy biến DatePicker

Theo mặc định, ngày hiển thị trên trường Date (Date Field) là theo định dạng địa phương (Local locale), và theo chuẩn ISO. Điều đó có nghĩa là ngày hiển thị sẽ theo cấu hình trên máy tính chạy ứng dụng của bạn.
Trên code Java bạn có thể tùy biến một cách hiển thị thông qua phương thức setConverter(..), và sử dụng setConverter(null) nếu bạn muốn trở về trạng thái mặc định.
Ví dụ dưới đây tùy biến hiển thị trên "Date Field" theo định dạng "dd-MM-yyyy":
DatePickerConverterDemo.java

package org.o7planning.javafx.datapicker;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;

public class DatePickerConverterDemo extends Application {

    @Override
    public void start(Stage stage) {

        DatePicker datePicker = new DatePicker();
        datePicker.setValue(LocalDate.of(2016, 7, 25));
        datePicker.setShowWeekNumbers(true);
       
        // Converter
        StringConverter<LocalDate> converter = new StringConverter<LocalDate>() {
            DateTimeFormatter dateFormatter =
                      DateTimeFormatter.ofPattern("dd-MM-yyyy");
           
            @Override
            public String toString(LocalDate date) {
                if (date != null) {
                    return dateFormatter.format(date);
                } else {
                    return "";
                }
            }
            @Override
            public LocalDate fromString(String string) {
                if (string != null && !string.isEmpty()) {
                    return LocalDate.parse(string, dateFormatter);
                } else {
                    return null;
                }
            }
        };   
        datePicker.setConverter(converter);
        datePicker.setPromptText("dd-MM-yyyy");
       

        FlowPane root = new FlowPane();
        root.getChildren().add(datePicker);
        root.setPadding(new Insets(10));

        stage.setTitle("DatePicker (o7planning.org)");
        Scene scene = new Scene(root, 300, 200);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }

}

4- Vô hiệu hóa một số ngày

Mặc định bạn có thể tương tác với tất cả các ngày trên DatePicker. Tuy nhiên bạn có thể tùy biến DatePicker để vô hiệu hóa một số ngày, bằng cách sử dụng phương thức setDayCellFactory.
Ví dụ dưới đây vô hiệu hóa tất cả các ngày thứ 2, thứ 3, thứ 4 trong tháng.
DatePickerConverterDemo.java

package org.o7planning.javafx.datapicker;

import java.time.DayOfWeek;
import java.time.LocalDate;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class DatePickerConverterDemo extends Application {

   // Nhà máy (factory) tạo ra ô trên DatePicker.
   private Callback<DatePicker, DateCell> getDayCellFactory() {

       final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {

           @Override
           public DateCell call(final DatePicker datePicker) {
               return new DateCell() {
                   @Override
                   public void updateItem(LocalDate item, boolean empty) {
                       super.updateItem(item, empty);
 
                       // Vô hiệu hóa thứ 2, 3, 4
                       if (item.getDayOfWeek() == DayOfWeek.MONDAY //
                               || item.getDayOfWeek() == DayOfWeek.TUESDAY //
                               || item.getDayOfWeek() == DayOfWeek.WEDNESDAY) {
                           setDisable(true);
                           setStyle("-fx-background-color: #ffc0cb;");
                       }
                   }
               };
           }
       };
       return dayCellFactory;
   }

   @Override
   public void start(Stage stage) {

       DatePicker datePicker = new DatePicker();
       datePicker.setValue(LocalDate.of(2016, 7, 25));
       datePicker.setShowWeekNumbers(true);

       // Nhà máy (factory) tạo ra ô trên DatePicker.
       Callback<DatePicker, DateCell> dayCellFactory= this.getDayCellFactory();
       datePicker.setDayCellFactory(dayCellFactory);

       FlowPane root = new FlowPane();
       root.getChildren().add(datePicker);
       root.setPadding(new Insets(10));

       stage.setTitle("DatePicker (o7planning.org)");
       Scene scene = new Scene(root, 300, 200);
       stage.setScene(scene);
       stage.show();
   }

   public static void main(String[] args) {
       Application.launch(args);
   }

}

Xem thêm các chuyên mục: