gpt4 book ai didi

java - 使用资源包更改标签

转载 作者:行者123 更新时间:2023-11-30 11:01:36 25 4
gpt4 key购买 nike

我正在编写一个 Java 应用程序,我只是停留在一个点上。我想制作一个带有菜单项语言的菜单,这显然会通过单击所需语言来更改应用程序的语言。为此,我编写了两个 .properties 文件:一个名为 LabelsBundle(英语)的默认文件和一个名为 LabelsBundle_de(德语)的扩展。我有这样的类(class):

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;

import javax.swing.*;

public class MenuBar extends JFrame implements ActionListener
{
private JMenuBar menuBar;
private JMenu language, about;
private JMenuItem UKLang, DELang, FRLang, ESPLang, POLLang;
private ResourceBundle labels;
private Locale currentLocale;

public MenuBar()
{
menuBar = new JMenuBar();
language = new JMenu("Language");
about = new JMenu("About");

UKLang = new JMenuItem("English");
DELang = new JMenuItem("German");
FRLang = new JMenuItem("French");
//ESPLang = new JMenuItem("Spanish");
POLLang = new JMenuItem("Polish");

UKLang.addActionListener(this);
DELang.addActionListener(this);

language.add(UKLang);
language.add(DELang);
language.add(FRLang);
language.add(POLLang);

menuBar.add(Box.createVerticalGlue());
menuBar.add(language);
menuBar.add(about);

}

public JMenuBar getMenu()
{
return menuBar;
}

@Override
public void actionPerformed(ActionEvent e)
{
Object input = e.getSource();


if(input == UKLang)
{
currentLocale = new Locale("en");
labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
}

else if(input == DELang)
{
currentLocale = new Locale("de");
labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
}

else if(input == FRLang)
{
currentLocale = new Locale("fr");
labels = ResourceBundle.getBundle("LabelsBundle_fr", currentLocale);
}

else if(input == POLLang)
{
currentLocale = new Locale("pl");
labels = ResourceBundle.getBundle("LabelsBundle_pol", currentLocale);
}

}

}

我不知道下一步该做什么。我的伙伴告诉我关于

object.setText(resourceBundle.getString("blabla"));

但我真的不知道如何将它与类似这样的东西一起使用

resultWaveLabel = new JLabel("Result wave:");

我假设我需要写类似的东西

resultWaveLabel.setText(...);

我说得对吗?

顺便说一句,当我在菜单列表中单击德语时,我收到一个错误

Exception in thread "AWT-EventQueue-0" java.util.MissingResourceException: Can't find bundle for base name LabelsBundle, locale de

编辑:我想强调的是,主要问题是如何更改上述内容的标签——而不是消除上述错误。这已经解决了。

最佳答案

异常

此输出是预期的,因为在您的项目中没有名为“LabelsBundle”的资源文件或

如果资源文件存在,但所需资源不存在,也会出现同样的情况。

此外,将名为 LabelsBundle.properties 的资源文件和您想要的任何资源放在与 MenuBar 类相同的目录中。意味着 java 文件和属性文件应该在同一目录中。

如果此 java 文件和属性文件在一个包中,则必须提供加载它的完全限定路径

例如,如果属性文件位于名为 newpackage 的包中,那么您应该像这样加载资源

ResourceBundle.getBundle("newpackage.LabelsBundle", currentLocale);

设置标签的值

引用这个link .这是更多细节将 ResourceBundle 分配给变量后(你的情况是 labels)就可以了

  resultWaveLabel.setText(labels.getString("blabla"));

更准确地说

@Override
public void actionPerformed(ActionEvent e)
{
Object input = e.getSource();


if(input == UKLang)
{
currentLocale = new Locale("en");
labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
}

else if(input == DELang)
{
currentLocale = new Locale("de");
labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
}

else if(input == FRLang)
{
currentLocale = new Locale("fr");
labels = ResourceBundle.getBundle("LabelsBundle_fr", currentLocale);
}

else if(input == POLLang)
{
currentLocale = new Locale("pl");
labels = ResourceBundle.getBundle("LabelsBundle_pol", currentLocale);
}
//Here you go. the magical code to do that
resultWaveLabel.setText(labels.getString("blabla"));///Here that's it your label is updated with the text
}

关于java - 使用资源包更改标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099213/

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