5

JavaFx 上是否有任何波斯日历DatePicker的实现?

在 DatePicker 上没有chronology使用波斯语来实现波斯日历

4

2 回答 2

8

我现在开发了一个即用型日历选择器,它还提供波斯日历。它最初受到 Christian Schudt 出色作品的启发,但完全重写和增强。只需下载我的库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);
    }
  }
);

您还可以设置其他属性,例如最小和最大日期。这里是使用波斯语的示例图像和伊朗的本地化周模型。您可以浏览所有波斯语月份、年份或几十年(通过单击标题)或跳转到当前日期(通过单击页脚)。

在此处输入图像描述

于 2016-11-01T04:20:49.393 回答
1

正如文档中所述,您可以ObjectProperty<Chronology>通过DatePicker. 您需要这样做的方法是

public final void setChronology(Chronology value)

由于没有实现默认的波斯/伊朗日历系统(仅实现了 hiraj 系统),您必须编写自己的:

"添加新日历 可用的年表集可以通过应用程序进行扩展。添加新的日历系统需要编写 Chronology、ChronoLocalDate 和 Era 的实现。日历系统特定的大部分逻辑将在 ChronoLocalDate 实现中。 Chronology 实现就像一个工厂。

为了允许发现其他年表,使用了 ServiceLoader。必须在 META-INF/services 目录中添加一个名为“java.time.chrono.Chronology”的文件,其中列出了实现类。有关服务加载的更多详细信息,请参阅 ServiceLoader。对于按 id 或 calendarType 查找,首先找到系统提供的日历,然后是应用程序提供的日历。

每个年表必须定义一个在系统内唯一的年表 ID。如果年表表示由 CLDR 规范定义的日历系统,则日历类型是 CLDR 类型和(如果适用)CLDR 变体的串联,

实现要求:必须小心实现此接口,以确保其他类正确运行。所有可以实例化的实现都必须是最终的、不可变的和线程安全的。子类应尽可能可序列化。” 来源:https ://docs.oracle.com/javase/8/docs/api/java/time/chrono/Chronology.html?is-external=true

于 2016-09-07T00:40:18.813 回答