如何在JFileChooser中更改文本?

时间:2011-01-31 11:25:29

标签: java swing jfilechooser

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

文件名:(JLabel)

文件类型:(JLabel)

取消(JButton)

不幸的是,这不是任何方法..

我有什么方法可以做到吗?

谢谢!

7 个答案:

答案 0 :(得分:2)

Java中的Swing组件完全能够理解国际化。 This article解释了细节,并展示了如何实现它的一个例子。

答案 1 :(得分:1)

如果您只需要翻译JFileChooser文字,我建议您更改JFileChooser语言区域(通过调用JFileChooser#setLocale(Locale)),而不是黑客入侵JFileChooser其内部。实际上,所有JFileChooser文本都依赖于语言环境。因此,将语言环境更改为您想要的语言环境将会更少的努力改变这些文本。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

showDialog()用于显示自定义对话框(例如,不是“打开”或“保存”对话框)。它有一个参数来指定批准按钮的文本。如果没有使用setDialogTitle()方法设置标题,则实施任意选择使用批准按钮的文本作为Windows操作系统上的标题,但是这里没有记录,你不应该指望这个工作。

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

如果您想要一个“打开”对话框,请使用showOpenDialog()方法。如果需要“保存”对话框,请使用showSaveDialog()。如果您想要自定义对话框,请仅使用showDialog()

答案 4 :(得分:1)

使用UIManager

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

答案 5 :(得分: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");

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

但是,OSX仍然会忽略

fileChooser.setLocale(Locale);

答案 6 :(得分:0)

这个答案是Fasimba / Icewalker在the DevX Java forum上发布的修改版本。 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!");
  1. 于2004年6月23日,上午08:06发布到the DevX Java forum