Я пытался связать виртуальную клавиатуру с моим сенсорным дисплеем. Я использую клавиатуру от 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());
}
}
}
Если я не смогу объяснить или, если смогу найти ссылку на эту проблему, пожалуйста, дайте мне знать. Спасибо!