JavaFx上是否有任何波斯日历env
的实现?
在DatePicker上没有使用波斯语DatePicker
来实现波斯日历
答案 0 :(得分:4)
我现在开发了一个即用型日历选择器,它也提供了一个波斯日历。它最初的灵感来自Christian Schudt的精彩作品,但完全被重写和增强。只需下载我的库Time4J - v4.20(或以后,可在Maven中使用)并使用this code demo:
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);
}
}
);
您还可以设置其他属性,例如最小和最大日期。这里是使用波斯语和伊朗本地化周模型的示例图像。您可以浏览所有波斯月,数年或数十年(通过单击标题)或跳转到当前日期(通过单击页脚)。
答案 1 :(得分:1)
正如文档中所述,您可以通过ObjectProperty<Chronology>
的{{1}}设置使用过的日历系统。
您需要这样做的方法是
DatePicker
由于没有默认的波斯语/伊朗语日历系统(只实现了hiraj系统),你必须自己编写:
“添加新日历 应用程序可以扩展可用的年表集。添加新的日历系统需要编写Chronology,ChronoLocalDate和Era的实现。特定于日历系统的大多数逻辑将在ChronoLocalDate实现中。年代表实施充当工厂。
为了允许发现其他年表,使用了ServiceLoader。必须将文件添加到META-INF / services目录中,并使用名称“java.time.chrono.Chronology”列出实现类。有关服务加载的更多详细信息,请参阅ServiceLoader。对于按id或calendarType查找,系统会首先找到日历,然后是应用程序提供的日历。
每个年代表必须定义在系统中唯一的年表ID。如果年表表示由CLDR规范定义的日历系统,则日历类型是CLDR类型和CLDR变体(如果适用)的串联,
实施要求: 必须小心实现此接口,以确保其他类正常运行。可以实例化的所有实现必须是最终的,不可变的和线程安全的。尽可能将子类化为Serializable。“ 资料来源:https://docs.oracle.com/javase/8/docs/api/java/time/chrono/Chronology.html?is-external=true