控制JavaFX虚拟键盘的尺寸

时间:2015-05-18 14:21:52

标签: javafx windows-8.1 javafx-8 virtual-keyboard

有没有办法调整JavaFX虚拟键盘子窗口的大小?

我将虚拟键盘所属的阶段称为子窗口,因为它在Scenic View中的标记方式。

我正在开发一个应用程序,它将专门使用虚拟键盘在表面3平板电脑上输入文本。由于此处所示的分辨率(2160x1440),键盘的按钮太短而无法可靠地按压在表面的屏幕上,调整宽度为1920: http://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; 

这里看到的问题是http://i.imgur.com/x5R7feQ.png,包含虚拟键盘的子窗口需要更高才能显示调整大小的按钮。

我有一个方法可以返回对虚拟键盘的引用,因此我可以在其他控制器中设置一个侦听器,以便在失去焦点时隐藏它。我尝试调整VK的大小但我无法控制子窗口的属性:

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;
}

由于时间限制,我与之合作的团队目前无法为应用程序构建自定义虚拟键盘​​,但这可能是我们未来的路线。

enter image description here

1 个答案:

答案 0 :(得分:2)

你快到了。

如果您在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);

Keyboard