如何在JFileChooser中更改文本?

4
在Java Swing组件JFileChooser中,我需要更改所有文本元素(用于翻译):

文件名:(JLabel)

文件类型:(JLabel)

取消(JButton)

不幸的是,没有任何方法可以实现这一点。

有没有办法可以做到这一点?

谢谢!

7个回答

3
Java中的Swing组件完全能够理解国际化。这篇文章详细介绍了如何实现国际化,并展示了一个示例。这篇文章说明了细节和演示了如何实现国际化。

2

Use UIManager

    UIManager.put("FileChooser.saveButtonText","Custom text acept");
    UIManager.put("FileChooser.cancelButtonText","custom text to cancel");
    JFileChooser fileChooser = new JFileChooser();

2
UIManager.put("FileChooser.fileNameLabelText", "FileName");
UIManager.put("FileChooser.filesOfTypeLabelText", "TypeFiles");

2

showDialog()方法用于显示自定义对话框(例如不是打开或保存对话框)。它有一个参数来指定批准按钮的文本。如果没有使用setDialogTitle()方法设置标题,则在Windows操作系统上,实现会任意选择使用批准按钮的文本作为标题,但这在任何地方都没有记录,并且您不应指望它能正常工作。

如果您想要自定义标题,请使用setDialogTitle()。如果您想要自定义批准按钮的文本,请使用setApproveButtonText()。显然,showDialog()方法也需要批准按钮的文本,在这种情况下,您无需事先调用setApproveButtonText()

如果您想要打开对话框,请使用showOpenDialog()方法。如果您想要保存对话框,请使用showSaveDialog()。仅当您想要自定义对话框时,才使用showDialog()方法。


1

如果您只需要翻译 JFileChooser 的文本,我建议您更改 JFileChooser 的语言环境(通过调用 JFileChooser#setLocale(Locale)),而不是试图入侵 JFileChooser 的内部。实际上,所有 JFileChooser 的文本都与语言环境有关。因此,将语言环境更改为所需的语言将以较少的努力改变这些文本。


2
只有当JFileChooser真正支持特定语言时才有效。在JDK 11之前,这仅限于英语、日语、中文、法语、德语、意大利语、韩语、葡萄牙语(巴西)、西班牙语和瑞典语。从JDK 11开始,Oracle决定放弃大多数语言(没有明显的原因)。所以现在,这仅适用于英语、日语和中文。但通常,任何JRE都可以支持任意一组语言,而且您甚至没有办法找出当前支持哪些语言... - Holger

0

这个答案是Fasimba/Icewalker在DevX Java论坛上发布的版本的修改版。1我引用了他的答案,只修改了搜索和替换参数。我为其中表达的逻辑获得任何荣誉。

public void changeButtonText (Component c, String original, String change) {

   if (c instanceof JButton) {
       JButton b = (JButton) c;
       if (b.getText() != null && b.getText().equalsIgnoreCase(original))
           b.setText(change);
   } else if (c instanceof Container) {
        Container cont = (Container) c;
        for (int i = 0; i < cont.getComponents().length; i++) {
           changeButtonText (cont.getComponent(i), original, change);
        }
   }
}

按以下方式调用:

// dirChooser is the JFileChooser instance
for (Component c : dirChooser.getComponents()) changeButtonText(c, "Cancel", "Don't do it!");

  • 在 2004 年 6 月 23 日上午8:06发布到DevX Java 论坛

  • 0

    通常情况下,JFileChooser@setLocale(Locale) 的工作方式与 Riduidel 所说的一样。但在 Mac OSX 上,这个方法会被忽略。

    在 Mac OSX 上,要正确设置默认语言环境,需要调用 UIManager.getLookAndFeelDefaults().setDefaultLocale(Locale); 注意,这仅适用于 Java 8,而不适用于 Java 7!

    似乎即使对于其他外观和感觉,你使用 UIManager.getDefaults().setDefaultLocale(Locale);,但对于 Aqua 外观和感觉,这并不起作用。看起来在 AquaFileChooserUI.java 文件中的 protected void installStrings(JFileChooser paramJFileChooser) 方法中,对 UIManager.getString() 的调用没有使用语言环境,而其他的 installStrings() 方法,例如在 BasicFileChooserUI 中,确实在 protected void installStrings(JFileChooser) 方法中使用了语言环境。

    Aqua:UIManager.getString("FileChooser.cancelButtonText");

    Basic:UIManager.getString("FileChooser.cancelButtonText",l);

    然而,在 OSX 上,fileChooser.setLocale(Locale); 仍然被忽略。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接