国际化 GUI 窗体
本教程将指导您完成在 NetBeans IDE 中进行国际化的一些基本步骤。我们将对一个窗体设置国际化,并在稍后设计该窗体。接下来,我们会国际化整个项目,该项目在几个不同的包中包含若干窗体。您可以通过指定自动国际化或使用专门的向导来国际化应用程序。
预计时间:30 分钟
目录

要学完本教程,您需要具备以下软件和资源。
国际化的原理
通过进行国际化,可以根据不同的语言和地区来改编应用程序,而无需进行工程更改或重新编译。国际化程序允许将文本性元素(如状态消息和 GUI 组件标签)存储在源代码外部并对其进行动态检索,而不是在程序中对其进行固定编码。
通常将国际化字符串以键/值对的形式存储在属性文件中。键是程序用于检索文本的标识符,而值是实际文本。对于转换程序所用的每种语言环境(或语言),都将创建一个属性文件。键在每种语言环境中都相同,只是字符串不同。
IDE 提供了用于执行下列各项操作的工具:
- 在创建 GUI 窗体或 Java 程序时插入国际化字符串
- 将单个文件或文件组中的所有固定编码字符串替换为国际化字符串
在设计时国际化 GUI 窗体
在此练习中,我们将打开 Java 应用程序演示项目,其中包含使用 GUI 生成器创建的常用查找对话框。接下来,我们将对窗体 FindDialog.java 启用自动国际化。为了测试已国际化的 GUI 窗体,我们将在属性文件中添加一种新的语言环境,然后在非缺省语言环境下运行该窗体。
打开示例项目
- 下载 InternationalizeDemo.zip 项目并将其解压缩到您计算机上的任何位置。
- 选择“文件”>“打开项目”(Ctrl-Shift-O),导航至您在上一步中解压缩的 InternationalizeDemo 项目,然后单击“打开”。项目文件夹可能包含在同样名为 InternationalizeDemo 的文件夹中。
- 展开“源包”> "demo",然后双击 "FindDialog.java"。将在 GUI 生成器中打开样例窗体。

要查看如何创建此 GUI 窗体的演示,请单击查看演示。
启用自动国际化
- 在“检查器”窗口中选择根节点(名为“窗体 FindDialog”)。

- 在“属性”窗口中,选中“自动国际化”属性的复选框。

如果选中该复选框,则 IDE 将按照“属性包文件”属性中的设置在 demo 包中创建 Bundle.properties 文件。如果您需要在其他位置创建此文件,则可以单击“属性包文件”属性的省略号 (...) 按钮,然后选择一个位置,或者直接在该属性的文本字段中键入路径。

- 在“项目”窗口中,双击 "Bundle.properties" 节点,或者右键单击该节点,然后选择“编辑”。
将在源代码编辑器中打开该属性文件。正如您所看到的,将为窗体 FindDialog.java 生成所有相应的键和值。(每个键的名称是从窗体文件名和组件变量名派生的。例如,键 FindDialog.jLabel1.text 是为窗体文件 FindDialog 中包含的变量名为 jLabel1 的组件生成的。在此示例中,值 jLabel1 表示组件的 "text" 属性。
国际化各个 GUI 组件
现在,我们将使用 GUI 生成器为窗体中的 JLabel 和 JButton 输入国际化字符串。
- 在设计区域中选择相应的 GUI 组件(例如 jLabel1)。
- 在“属性”窗口中,单击 "text" 属性的省略号 (...) 按钮。请注意,您还可以对具有字符串值的其他属性进行国际化,例如助记符、可访问的名称、可访问的描述符和工具提示。
- 属性编辑器将切换至资源包模式。检查“包名”字段是否设置为 demo.Bundle,以及“键”字段是否包含字符串 FindDialog.jLabel1.text。
- 在“值”字段中键入 Find What:。
- 单击“确定”。
对所有组件重复以上步骤,以使该窗体如下图所示:

要查看国际化 jLabel1 的演示,请单击查看演示。
注意:可使用更加简单、快捷的方法来完成步骤 1 至 5:只需在“设计”视图中双击 "jLabel1",将其文本从 jLabel1 更改为 Find What:,然后按 Enter 键即可。其结果与以上提供的步骤所得到的结果相同。
添加新语言环境
- 在“检查器”窗口中选择根节点(“窗体 FindDialog”节点)。
- 在“属性”窗口中,单击“设计语言环境”属性的省略号 (...) 按钮。
- 在“国家/地区代码”字段中输入 ES。
- 单击“确定”。
"Bundle.properties" 节点下将显示新语言环境,如下所示:

- 在“项目”窗口中,右键单击 "Bundle.properties",然后选择“打开”。
- 将相应表列中的各条消息转换为新语言(如西班牙语),如下所示:

- 在“检查器”窗口中右键单击根节点,然后选择“重新装入窗体”(或按 Ctrl-R 组合键)。将重新打开该窗体,并在设计区域中装入西班牙语语言环境,如下所示:

您可以在此动画演示的操作中看到这些功能(尽管它并不完全对应于本教程)。
测试非缺省语言环境
- 在“项目”窗口中,右键单击 InternationalizeDemo 项目,然后选择“属性”。
- 在“类别”窗格中,选择“运行”节点。
- 在“VM 选项”字段中输入 -Duser.language=es -Duser.country=ES。

- 单击“确定”。
- 右键单击 InternationalizeDemo 项目,然后选择“运行项目”。
IDE 将在西班牙语语言环境中运行 FindDialog 对话框。
国际化整个项目
通常,我们在缺省语言环境中拥有几个文件,并且系统要求我们改编这些文件,以便将其转换为其他语言。“国际化向导”是用于执行此任务的最佳工具,因为它可以一次国际化多个文件。我们将在 GUI 窗体示例项目中演示此功能,该项目包含在设计 Swing GUI 教程中创建的窗体。
创建样例项目
- 选择“文件”>“新建项目”,或者单击 IDE 工具栏中的“新建项目”图标。
- 在“类别”窗格中,选择“样例”> "Java" 节点。在“项目”窗格中,选择 "GUI Form Examples"。单击“下一步”。
- 在“项目名称”字段中输入 GUIFormExamples,然后指定项目位置(例如 /space/projects)。
- 将“使用专用文件夹存储库”复选框保留为取消选中状态。(如果使用的是 NetBeans IDE 6.0,则此选项不可用。)
- 确保“设置为主项目”复选框处于选中状态。
- 单击“完成”。

准备属性文件
- 选择“文件”>“新建文件”,或者单击 IDE 工具栏中的“新建文件”图标。
- 在“类别”窗格中,选择“其他”节点;在“文件类型”窗格中,选择“属性文件”。单击“下一步”。
- 在“文件名”字段中输入 ContactEditor,然后将 src/examples 文件夹指定为文件位置。
- 单击“完成”。
IDE 将创建 ContactEditor.properties 文件,并在源代码编辑器中打开 ContactEditor(缺省语言) 文件。
重复上述步骤以创建另一个 Antenna.properties 文件。

调用“国际化向导”
- 在“项目”窗口中,右键单击“源包”节点,然后选择“工具”>“国际化”>“国际化向导”。
- 选择 "Find.java",然后单击“删除源”按钮(出于演示目的)。

- 单击“下一步”。
- 检查“国际化向导”是否提供了正确的属性文件 examples.Antenna 和 examples.ContactEditor。如果未提供,请使用“选择资源”按钮来选择正确的属性文件。

- 单击“下一步”。
- 所有固定编码字符串都将显示在“国际化向导”的最后一步中,您可以在该步中确定将哪些字符串包含在属性文件中(使用复选框)。您也可以进一步定制各个键、值、注释和替换字符串的格式,方法是单击字符串的省略号 (...) 按钮。

- 单击“完成”。
现在,已完成源代码的国际化,接下来可以按照先前所述添加和测试其他语言环境。
国际化单个窗体
使用自动国际化功能是国际化 GUI 窗体的最简便方法。但是,如果您没有安装更新包,或者还希望国际化不是由窗体编辑器生成的代码,则可以使用“国际化”窗口。(此功能可处理任何 .java 文件,而不仅仅是通过窗体编辑器创建的文件)。下面的示例使用了“国际化”窗口,该窗口是 NetBeans IDE 5.5 缺省安装的一部分。
在此最后练习中,我们将重用 GUI 窗体示例项目并国际化 Find.java 窗体(在先前的练习中排除了该窗体)。我们将调用“国际化”对话框来替换此文件中的所有固定编码字符串。最后,我们将简要演示如何在编写程序时将国际化字符串插入源代码中。
使用“国际化”对话框
- 在“项目”窗口中,右键单击 "Find.java",然后选择“工具”>“国际化”>“国际化”。
IDE 将显示“国际化”对话框,并预先填写 Find.java 源代码中的第一个固定编码字符串。
- 单击“浏览”以选择特定的属性文件,或者创建新文件(例如 Find.properties)。
- 您可以修改替换字符串的格式、键、值或注释(如有必要)。我们将仅保留缺省值。
- 单击“替换”以确认更改,并将焦点移到下一个固定编码字符串上。
如果不需要替换固定编码字符串,请单击“跳过”按钮。

要查看使用“国际化”对话框的演示,请单击查看演示
插入单个国际化字符串
- 在“项目”窗口中,右键单击 "Find.java",然后选择“编辑”。
IDE 将在源代码编辑器中打开 Find.java 文件。
- 滚动查看源代码并查找 main 方法。
- 在 main 方法中插入以下用粗体显示的行:
public static void main(String args[]) {
System.out.println();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Find().setVisible(true);
}
});
}
- 按 Ctrl-Shift-J 组合键以调用国际化字符串对话框。
- 对于“包名”,单击“新建”按钮,选择“源包”> "examples" 文件夹,并输入 Find 作为包名。然后,单击“确定”。“包名”字段将显示 examples.Find。
- 在“键”下拉框中键入 Start,并在“值”字段中键入 Start Find Dialog。然后,单击“确定”。

- IDE 将插入国际化字符串:
public static void main(String args[]) {
System.out.println(java.util.ResourceBundle.getBundle("examples/Find").getString("Start"));
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Find().setVisible(true);
}
});
}
要查看插入国际化字符串的演示,请单击查看演示。
相关主题
有关更多信息,请参见以下链接:
- Java GUI 学习资源,完整地列出了使用 Project Matisse(NetBeans GUI 生成器)创建 Java 图形用户界面 (Graphical User Interface, GUI) 的相关文章、指南和教程。
- 设计 Swing GUI,提供了详细的 NetBeans GUI 生成器教程。
- GUI 生成器常见问题解答,汇集了使用 NetBeans GUI 生成器的有用提示和技巧。