为什么设置 JDialog 或 JFrame setVisible(true) 会切换我的 IME 设置?
我发现,当我在Java swing应用程序中显示一个或一个新的时,应用程序将在Windows 7中将我的中文输入法从半字节模式切换到全字节模式。JDialog
JFrame
为什么调用对话框或框架方法会切换我的 IME 设置?setVisible(true)
有谁知道代码有什么问题,或者它是Java的一个错误?
重现问题的过程:
- 运行应用程序。
- 将您的语言更改为中文输入法之一,例如。中文(繁体) - 快速
- 单击程序中的按钮
我的语言设置
我发现了一个类似的问题 Java中Windows 7输入法自动切换字符宽度
添加默认区域设置后,它仍然不起作用
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Locale;
public class MainWindow {
private JFrame frame;
private Locale l;
/**
* Create the application.
*/
public MainWindow() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
l = new Locale("zh", "zh_TW");
frame = new JFrame();
frame.setLocale(l);
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JDialog d = new JDialog(frame, "Run", true);
d.getContentPane().add(new JLabel("dsad"));
d.setMinimumSize(new Dimension(150, 100));
d.setLocationRelativeTo(null);
d.setLocale(l);
d.setVisible(true);
}
});
frame.getContentPane().add(btnNewButton, BorderLayout.CENTER);
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainWindow window = new MainWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}