在JavaFX 8 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)); ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |