繁体   English   中英

如何更改 JFileChooser 中的文本?

[英]How to change text in JFileChooser?

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

文件名: (JLabel)

文件类型: (JLabel)

取消(J按钮)

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

有什么办法可以做到吗?

谢谢!

Java 中的 Swing 组件完全能够理解国际化。 本文解释了详细信息并展示了如何实现的示例。

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

使用 UIManager

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

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

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

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

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

通常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() protected void installStrings(JFileChooser paramJFileChooser)的调用不使用语言环境,而其他 installStrings() 方法(例如在 BasicFileChooserUI 中)使用protected void installStrings(JFileChooser)的语言环境protected void installStrings(JFileChooser)方法。

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

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

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

此答案是 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!");

  1. 发表于DevX Java 论坛于 23/06/2004, 08:06 AM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM