Я обнаружил, что когда я показываю JDialog
или новый JFrame
, в моем приложении Java swing будет переключать мой китайский метод ввода из полубайтового режима в полнобайтовый режим в Windows 7.
Почему вызов метода диалога или фрейма setVisible(true)
переключает мою настройку IME?
Кто-нибудь знает, что не так с кодом, или это ошибка Java?
Процедура воспроизведения проблемы:
- запустите приложение.
- измените свой язык на один из китайских методов ввода, например. Китайский (традиционный) - Быстрый
- нажмите кнопку в программе
Настройки моего языка
Я нашел аналогичный вопрос Автоматическое переключение ширины символов с помощью методов ввода Windows 7 в Java
и после добавления стандарта по умолчанию он все еще не работает
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();
}
}
});
}
}