gpt4 book ai didi

java - 将语言环境正确设置为 JFileChooser

转载 作者:搜寻专家 更新时间:2023-11-01 02:27:51 25 4
gpt4 key购买 nike

我在运行时更改区域设置时遇到了一个小问题。

目标

我必须根据配置文件更改我的应用程序语言的区域设置。

此语言环境不一定与主机/操作系统语言环境或 JVM 默认语言环境相同。

此外,我无法在调用应用程序时修改user.language。然后,我必须在运行时执行此操作。

问题

总结我的代码,我阅读了配置文件并获得了不同的选项(包括语言环境)。之后,我根据这些配置的选项初始化应用程序环境。

之后,我构建框架并开始应用程序生命周期。

public static void main(String[] args) {
File fichier;
Ini ini; //Ini4J object
Modele modele = new Modele(); //My Model class: it stores configuration and other stuff
try {
fichier = new File(Modele.CONFIGURATION);
ini = new Ini(fichier);
modele.setLocaleLang(ini.get(Modele.LOCALE, Modele.LANG, String.class));
// read more options
} catch(InvalidFileFormatException e) {
// exception processing
} catch (IOException e) {
// exception processing
} finally {
ini = null;
fichier = null;
}

// More code
JComponent.setDefaultLocale(modele.getLocaleLang());

// More initialization code
MyFrame fenetre = new MyFrame(modele);
fenetre.visualiser();
}

好吧,在生命周期中,您可以打开文件。显然,我使用 JFileChooser 来解决这个问题:

JFileChooser jfc = new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
jfc.setFileFilter(modele.FILTRE_OUVRIR);
jfc.showOpenDialog(null);

所有文件选择器都使用配置的语言环境进行设置,但类型选择器不会改变。下图显示了问题(操作系统区域设置:es_ES,配置的区域设置:fr_FR):

enter image description here

如您所见,在组合框“Fichiers de type”中:该选项以西类牙语而不是法语显示。

有人能给我解释一下这个问题吗?我的代码有问题吗?可能是因为我使用的是文件过滤器导致的问题?

谢谢你的建议。

最佳答案

看起来像是 BasicFileChooserUI 使用的 acceptAllFilter 中的错误,它没有按应有的方式查找文本的本地化版本:

// BasicFileChooserUI
/**
* Returns the default accept all file filter
*/
public FileFilter getAcceptAllFileFilter(JFileChooser fc) {
return acceptAllFileFilter;
}

// buggy acceptAllFilter: doens't respect locale
protected class AcceptAllFileFilter extends FileFilter {

public AcceptAllFileFilter() {
}

public boolean accept(File f) {
return true;
}

public String getDescription() {
return UIManager.getString("FileChooser.acceptAllFileFilterText");
}
}

如果您的模型返回 null,则使用此默认值。唯一的出路(我认为)是让模型返回一个做正确事情的过滤器,比如 f.i.:

protected class AcceptAllFileFilter extends FileFilter {

private Locale locale;

public AcceptAllFileFilter(Locale locale) {
this.locale = locale;
}

@Override
public boolean accept(File f) {
return true;
}

@Override
public String getDescription() {
return UIManager.getString("FileChooser.acceptAllFileFilterText", locale);
}
}

关于java - 将语言环境正确设置为 JFileChooser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com