您可以为 Java 虚拟机调用实例定义默认区域设置:
Locale.setDefault(Locale.ENGLISH);
或者,如果您找不到区域设置,则需要在预制常量中,可以在列表中查找国家/地区代码官方支持的语言环境并创建您的“自定义”区域设置,如下所示:
Locale.setDefault(Locale("cs")) //locale for Czech language
on the start
方法。如果您还想为文本编辑器实现自定义格式化程序,则也应该向格式化程序添加区域设置。
这只是一个例子:
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();
}
EDIT
通过设计,DatePicker
uses Locale.getDefault()
应用于弹出窗口上显示的控件的所有格式。这个可以查com.sun.javafx.scene.control.skin.DatePickerContent
class.
除非您为更改这些格式化程序的控件提供自定义皮肤,以便更改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));
...
}
EDIT 2
返回到原始语言环境setOnShown
太早了,因为如果用户更改月份,则会使用原始区域设置,并且不会正确显示。要工作,应同时关闭setOnHiding
and on 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));
...
}