Клавиатура отключается при добавлении Windowfocuslistner - PullRequest
0 голосов
/ 16 апреля 2020

Я пытался связать виртуальную клавиатуру с моим сенсорным дисплеем. Я использую клавиатуру от Mindfusion. У меня проблема с реализацией вместе с полем jText.

Необходимое решение: клавиатура должна отображаться глобально везде, где текстовое поле присутствует в приложении. Все, что я печатаю на клавиатуре, должно появиться в jtextfield. При нажатии вне фокуса клавиатуры клавиатура должна исчезнуть.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на jTextField, я могу отобразить клавиатуру, а когда я нажимаю не в фокусе, она исчезают также. Но что бы я ни печатал на Виртуальной клавиатуре или на реальной физической клавиатуре, на jTextField текст не печатается.

Если я прокомментирую строку keyboardDialog.setFocusableWindowState (true); в приведенном ниже коде , символы печатаются, но фокусировка не работает и наоборот. Я все еще пытаюсь понять темы, связанные с фокусом в Java. Любые предложения будут действительно полезны, спасибо.

    public class VirtualKeyboard {

    static JDialog keyboardDialog;
        static void virtualKeyboard_init(JDialog dialog) {
        try {
            keyboardDialog = new JDialog(dialog);

            VirtualKeyboard vkb = new VirtualKeyboard();
            vkb.setMode(KeyboardMode.Default);
            vkb.setStandalone(true);
            vkb.setFocusable(true);
            vkb.setPreferredSize(new Dimension(1024, 300));
            vkb.setBorder(null);
            keyboardDialog.setUndecorated(true);
            keyboardDialog.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 24));
            keyboardDialog.add(vkb);    
            keyboardDialog.setBounds(0, 300, 1024, 300);
            keyboardDialog.setAlwaysOnTop(true);
            keyboardDialog.setFocusableWindowState(true);
            keyboardDialog.addWindowFocusListener(new WindowFocusListener() {
                @Override
                public void windowGainedFocus(WindowEvent e) {
                    System.out.println("Keyboard WIndow Focus Gained");
                }

                @Override
                public void windowLostFocus(WindowEvent arg0) {
                    // Must be implemented
                    System.out.println("Keyboard Window Focus Lost");
                    keyboardDialog.dispose();
                }
            }); 

        } catch (Exception e) {
            e.printStackTrace();

                logger.severe(" Keyboard Loading Error!" + e.getMessage());
        }
    }
}

Если я не смогу объяснить или, если смогу найти ссылку на эту проблему, пожалуйста, дайте мне знать. Спасибо!

...