加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在JavaFX 8 DatePicker中更改语言

发布时间:2020-12-15 04:24:06 所属栏目:Java 来源:网络整理
导读:将DatePicker添加到我的应用程序时,我得到以下内容: 我认为这是因为我在计算机上使用希伯来语. 如何将DatePicker的语言更改为英语? 解决方法 您可以为 Java虚拟机调用实例定义缺省语言环境: Locale.setDefault(Locale.ENGLISH); 或者,如果找不到语言环境,
将DatePicker添加到我的应用程序时,我得到以下内容:

我认为这是因为我在计算机上使用希伯来语.
如何将DatePicker的语言更改为英语?

解决方法

您可以为 Java虚拟机调用实例定义缺省语言环境:

Locale.setDefault(Locale.ENGLISH);

或者,如果找不到语言环境,则需要在预先设定的常量中查找officially supported locales列表中的国家/地区代码,并创建“自定义”语言环境,如下所示:

Locale.setDefault(Locale("cs")) //locale for Czech language

在启动方法上.如果您还想为文本编辑器实现自定义格式化程序,则还应将语言环境添加到格式化程序中.

这只是一个例子:

private final DateTimeFormatter formatter = 
        DateTimeFormatter.ofPattern("EEEE,d.MM.uuuu",Locale.ENGLISH);

@Override
public void start(Stage primaryStage) {
    Locale.setDefault(Locale.ENGLISH);

    DatePicker datePicker=new DatePicker();
    datePicker.setValue(LocalDate.now());
    datePicker.setConverter(new StringConverter<LocalDate>() {

        @Override
        public String toString(LocalDate object) {
            return object.format(formatter);
        }

        @Override
        public LocalDate fromString(String string) {
            return LocalDate.parse(string,formatter);
        }
    });
    StackPane root = new StackPane(datePicker);
    Scene scene = new Scene(root,400,400);

    primaryStage.setScene(scene);
    primaryStage.show();
}

编辑

按照设计,DatePicker在应用于弹出窗口上显示的控件的所有格式中使用Locale.getDefault().这可以在com.sun.javafx.scene.control.skin.DatePickerContent类中检查.

除非为控件更改这些格式化程序提供自定义外观,否则为了将DatePicker内容更改为英语,避免进一步更改其他本地化控件,可以采用以下方法:

private final Locale myLocale = Locale.getDefault(Locale.Category.FORMAT);

@Override
public void start(Stage primaryStage) {
    DatePicker datePicker=new DatePicker();
    datePicker.setValue(LocalDate.now());
    datePicker.setOnShowing(e-> Locale.setDefault(Locale.Category.FORMAT,Locale.ENGLISH));
    datePicker.setOnShown(e-> Locale.setDefault(Locale.Category.FORMAT,myLocale));
    ...
}

编辑2

返回到setOnShown上的原始区域设置太快,因为如果用户更改月份,则使用原始区域设置,并且将无法正确显示.要工作,应该在setOnHiding和setOnAction上关闭它.

private final Locale myLocale = Locale.getDefault(Locale.Category.FORMAT);

@Override
public void start(Stage primaryStage) {
    DatePicker datePicker=new DatePicker();
    datePicker.setValue(LocalDate.now());
    datePicker.setOnShowing(e-> Locale.setDefault(Locale.Category.FORMAT,Locale.ENGLISH));
    datePicker.setOnHiding(e-> Locale.setDefault(Locale.Category.FORMAT,myLocale));
    datePicker.setOnAction(e-> Locale.setDefault(Locale.Category.FORMAT,myLocale));
    ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读