当前位置: 首页 > 知识库问答 >
问题:

更改JavaFX虚拟键盘的显示

赵超
2023-03-14
    null

在当前的系统配置中,有没有办法在我的触摸监视器上显示虚拟键盘?例如,告诉键盘它的所有者应用程序在哪里,以便它在正确的监视器上显示?

共有1个答案

傅玮
2023-03-14

了解如何将显示键盘的监视器更改为显示应用程序的监视器。

将更改侦听器附加到TextField的Focusted属性。执行更改侦听器时,检索键盘弹出窗口。然后找到显示应用程序的监视器的活动屏幕边界,并将键盘x坐标移动到此位置。

通过设置autoFix为true,键盘将确保它不(部分)在你的显示器之外,设置autoFix将自动调整y坐标。如果不设置autoFix,还必须手动设置y坐标。

@FXML
private void initialize() {
  textField.focusedProperty().addListener(getKeyboardChangeListener());
}

private ChangeListener getKeyboardChangeListener() {
    return new ChangeListener() {
        @Override
        public void changed(ObservableValue observable, Object oldValue, Object newValue) {
            PopupWindow keyboard = getKeyboardPopup();

            // Make sure the keyboard is shown at the screen where the application is already shown.
            Rectangle2D screenBounds = getActiveScreenBounds();
            keyboard.setX(screenBounds.getMinX());
            keyboard.setAutoFix(true);
        }
    };
}

private PopupWindow getKeyboardPopup() {
    @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) {
                        return (PopupWindow)window;
                    }
                }
            }
            return null;
        }
    }
    return null;
}

private Rectangle2D getActiveScreenBounds() {
    Scene scene = usernameField.getScene();
    List<Screen> interScreens = Screen.getScreensForRectangle(scene.getWindow().getX(), scene.getWindow().getY(),
            scene.getWindow().getWidth(), scene.getWindow().getHeight());
    Screen activeScreen = interScreens.get(0);
    return activeScreen.getBounds();
}
 类似资料:
  • 我想永远不要像以编程方式显示/隐藏虚拟键盘一样隐藏虚拟键盘 或者(如果上面所说的不可能的话) 我想从虚拟键盘移除/隐藏/禁用下面(突出显示的绿色左下角)按钮。 在任何情况下都不要隐藏键盘,除非程序没有终止。 代码:你也可以在github上查看我的代码。

  • http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/embedd.htm 有没有人在javafx应用程序中有过虚拟键盘的经验?我需要能够显示正常的键盘或数字键盘时,文本字段是聚焦的。

  • 有什么方法可以调整JavaFX虚拟键盘子窗口的大小吗? 我指的是虚拟键盘属于的阶段作为一个子窗口,因为它是如何在风景视图中被标记的。 我正在开发一个应用程序,专门使用虚拟键盘在Surface3平板上进行文本输入。由于分辨率(2160x1440),键盘的按钮太短,无法可靠地按在Surface的屏幕上,如图所示,将其调整为1920的宽度:http://i.imgur.com/kp65dlm.png:h

  • 我用JavaFX设计了一个简单的虚拟键盘,用于一个刽子手风格的游戏。唯一的问题是,我无法获得正确的第二行和第三行的对齐方式,就像真正的键盘设计一样(例如,a键几乎在Q键和W键之间)。 键盘只是使用实现的,网格窗格中每个字符都有一个按钮。 有没有办法插入一点空白?我真的想过堆叠三个,每行一个,然后添加正确的偏移量作为空白文本,但这在我看来有点勉强,所以我想知道是否有一种“更干净”的方法。 以下是我的