Как реализовать персидский каландар

Есть ли реализация персидского календаря DatePicker на JavaFx?

Нет персидского choronology использовать на DatePicker для достижения персидского каландра

2 ответа

Решение

Сейчас я разработал готовый инструмент для выбора календаря, который также предлагает персидский календарь. Первоначально он был вдохновлен хорошей работой Кристиана Шудта, но полностью переписан и улучшен. Просто скачайте мою библиотеку Time4J -v4.20 (или более позднюю версию, доступную в Maven) и используйте демонстрационный код:

CalendarPicker<PersianCalendar> picker = picker.persianWithSystemDefaults();

picker.setLengthOfAnimations(Duration.seconds(0.7));
picker.setShowInfoLabel(true);
picker.setLocale(new Locale("fa", "IR"));
picker.setShowWeeks(true);

picker.setCellCustomizer(
  (cell, column, row, model, date) -> {
    if (CellCustomizer.isWeekend(column, model)) {
      cell.setStyle("-fx-background-color: #FFE0E0;");
      cell.setDisable(true);
    }
  }
);

Вы также можете установить другие свойства, такие как минимальная и максимальная дата. Вот пример изображения с использованием языка фарси и локализованной недельной модели для Ирана. Вы можете перемещаться по всем персидским месяцам, годам или десятилетиям (нажав на заголовок) или перейти к текущей дате (нажав на нижний колонтитул).

введите описание изображения здесь

Как указано в документации, вы можете установить используемую календарную систему через ObjectProperty<Chronology> из DatePicker, Метод, который вам нужно сделать, это

public final void setChronology(Chronology value)

Поскольку система персидских / иранских календарей по умолчанию (реализована только система hiraj) не реализована, вы должны написать свою собственную:

"Добавление новых календарей" Набор доступных хронологий может быть расширен приложениями. Добавление новой календарной системы требует написания реализации Chronology, ChronoLocalDate и Era. Большая часть логики, характерной для календарной системы, будет в реализации ChronoLocalDate. Реализация хронологии действует как фабрика.

Чтобы разрешить обнаружение дополнительных хронологий, используется ServiceLoader. В каталог META-INF/services необходимо добавить файл с именем "java.time.chrono.Chronology", в котором перечислены классы реализации. Смотрите ServiceLoader для более подробной информации о загрузке службы. Для поиска по id или calendarType сначала необходимо найти предоставленные системой календари, а затем календари, предоставленные приложением.

Каждая хронология должна определять идентификатор хронологии, который уникален в системе. Если хронология представляет календарную систему, определенную спецификацией CLDR, тогда тип календаря является объединением типа CLDR и, если применимо, варианта CLDR,

Требования к реализации: этот интерфейс должен быть реализован с осторожностью, чтобы обеспечить правильную работу других классов. Все реализации, которые могут быть созданы, должны быть окончательными, неизменяемыми и поточно-ориентированными. Подклассы должны быть Сериализуемыми, где это возможно."Источник: https://docs.oracle.com/javase/8/docs/api/java/time/chrono/Chronology.html?is-external=true

Другие вопросы по тегам