On Windows Swing changes keyboard layout on a window activation
If "Let me set a different input method for each app window" checkbox is disabled, Swing applications switch System keyboard layout to the layout they were started with.
On Windows 10 you can find the checkbox at Control Panel -> Clock, Language and Region -> Language -> Advanced Settings -> "Let me set a different input method for each app window"
To reproduce the problem, disable the checkbox.
Add at least two languages at Control Panel -> Clock, Language and Region -> Language -> Change you language preferences
For instance, you can add Russian and English languages
Run the java app
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame jFrame = new JFrame("Test");
jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jFrame.setSize(new Dimension(200,200));
jFrame.add(new JTextArea());
jFrame.pack();
jFrame.setVisible(true);
});
}
}
Deactivate the Swing frame (click on the desktop or any other application window), change the input language.
Activate the Swing frame again. Being activated the frame changes the input language system wide.