import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.im.InputContext;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class JavaInputTestForm extends JPanel {

    private static JFrame frame;

    public JavaInputTestForm() {
        super();
        setLayout(new BorderLayout());
        setPreferredSize(new Dimension(600, 400));

        JTextField textField = new JTextField();
        textField.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_WINDOWS) {
                    return;
                }

                System.out.println("--- Key PRESS");
                System.out.println("\tkeyboard locale: " + InputContext.getInstance().getLocale());
                System.out.println("\tKEY CHAR: '" + evt.getKeyChar() + "' (defined=" + (evt.getKeyChar() != KeyEvent.CHAR_UNDEFINED) + "; "
                        + ((int) evt.getKeyChar()) + ", 0x" + Integer.toHexString((int) evt.getKeyChar()) + ")");
                System.out.println("\tKEY CODE: " + " (" + KeyEvent.getKeyText(evt.getKeyCode()) + "): " + evt.getKeyCode() + ", 0x"
                        + Integer.toHexString(evt.getKeyCode()));
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }

        });
        add(textField, BorderLayout.NORTH);
    }

    private static void createAndShowGUI() {
        frame = new JFrame("Test Form");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JavaInputTestForm(), BorderLayout.CENTER);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String... args) {
        SwingUtilities.invokeLater(() -> createAndShowGUI());
    }

}
