Управляйте размерами виртуальной клавиатуры JavaFX

Есть ли способ изменить размер подокна виртуальной клавиатуры JavaFX?

Я называю сцену, к которой принадлежит виртуальная клавиатура, подокном из-за того, как она помечена в Scenic View.

Я разрабатываю приложение, которое будет использовать исключительно виртуальную клавиатуру для ввода текста на планшете Surface 3. Кнопки клавиатуры слишком короткие, чтобы надежно нажимать на экран поверхности из-за разрешения (2160x1440), как показано здесь, размер изменен до ширины 1920: https://i.imgur.com/KP65dlM.png

Применение этого стиля дает мне желаемую высоту кнопки:

.fxvk {
-fx-cursor: default;
-fx-background-color: linear-gradient(to bottom, rgb(126, 126, 126) 0%, rgb(76, 76, 76) 10%, rgb(84, 84, 84) 100%);
-fx-background-insets: 0,0,0,0;
-fx-padding: 8 4 10 4;
-fx-min-height: 400; 

Проблема, описанная здесь https://i.imgur.com/x5R7feQ.png, заключается в следующем. что подокно, содержащее виртуальную клавиатуру, должно быть выше для отображения кнопок с измененным размером.

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

public static PopupWindow getKeyboard() {

    @SuppressWarnings("deprecation")
    final Iterator<Window> windows = Window.impl_getWindows();

    while (windows.hasNext()) {
        final Window window = windows.next();
        if (window instanceof PopupWindow) {
            if (window.getScene() != null && window.getScene().getRoot() != null) {
                Parent root = window.getScene().getRoot();
                if (root.getChildrenUnmodifiable().size() > 0) {
                    Node popup = root.getChildrenUnmodifiable().get(0);
                    if (popup.lookup(".fxvk") != null) {
                        if (popup instanceof FXVK) {

                            FXVK keyboard = (FXVK) popup; // reference to the vk skin

                            keyboard.getScene().heightProperty().add(200); // This increases the height but the vk window does not size to its contents like other windows

                            PopupWindow test = (PopupWindow) window; // reference to the window with the vk, casted to a PopupWindow
                            test.getOwnerWindow().setHeight(test.getOwnerWindow().getHeight() + 200); // This increases the height but the vk window does not size to its contents like other windows

                            return test;
                        }
                    }
                }
            }
            return null;
        }
    }
    return null;
}

Команда, с которой я работаю, в настоящее время не может создать пользовательскую виртуальную клавиатуру для приложения из-за нехватки времени, но, вероятно, мы пойдем по этому пути в будущем.

введите здесь описание изображения


person Adam Sheingold    schedule 18.05.2015    source источник


Ответы (1)


Вы почти там.

Если вы измените высоту клавиатуры в пределах getPopupWindow():

    if(popup.lookup(".fxvk")!=null){
        FXVK vk = (FXVK)popup.lookup(".fxvk");
        vk.setMinHeight(400);
        return (PopupWindow)window;
    }

Получив экземпляр всплывающего окна, просто вызовите setAutoFix(true):

PopupWindow keyboard=getPopupWindow();
keyboard.setAutoFix(true);

Клавиатура

person José Pereda    schedule 18.05.2015