【发布时间】:2014-07-20 09:24:25
【问题描述】:
每个操作系统都有不同的方案来通过键盘或鼠标更改语言。 Java 中是否有任何 API 支持以编程方式更改语言?
我想要一个带有两个 JTextField 对象的翻译器。如果我输入一个,我会自动输入英语,如果我输入另一个,我想自动切换到另一种语言。如果该语言是日语或中文,我希望操作系统在进入该组件时自动切换到该语言,而不必每次都手动切换。这是一些使用 Locale 和 InputContext 的示例代码。表示设置上下文成功,但是我打字,英文就出来了。将此与我手动切换到日语进行对比,在这种情况下键入会产生日语字符。我做错了什么?
public class TestLocale extends JFrame {
public TestLocale() {
super("TestLocale");
setSize(600,600);
JTextField a = new JTextField("English");
JTextField b = new JTextField("Japanese");
Locale loc =Locale.JAPANESE;
System.out.println("Script: " + loc.getScript());
System.out.println("Language: " + loc.getLanguage());
b.setLocale(loc);
b.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
InputContext c = InputContext.getInstance();
boolean b = c.selectInputMethod(Locale.JAPANESE);
System.out.println("Trying to request Japanese: " + b);
}
} );
add(BorderLayout.NORTH, a);
add(BorderLayout.SOUTH, b);
setVisible(true);
}
public static void main(String[] a) {
TestLocale t = new TestLocale();
}
}
由于日语是多字节且更复杂,我尝试了希腊语。我可以在这里切换到希腊语:ασδκφξησκ (手动)
但是当我选择希腊语输入上下文时,什么也没有发生:
b.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
InputContext c = InputContext.getInstance();
boolean b = c.selectInputMethod(new Locale("el", "GR"));
System.out.println("Trying to request Greek: " + b);
}
} );
【问题讨论】:
-
您应该查看语言环境。
-
我创建了两个 JTextField 并将一个的区域设置为英语,另一个的区域设置为日语。当我点击文本字段时,它不会默认输入日语。
标签: java swing locale jtextfield