Как реализовать персидский каландар
Есть ли реализация персидского календаря 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