Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在显示虚拟键盘之前将其居中放置在底部-javafx_Javafx_Virtual Keyboard - Fatal编程技术网

如何在显示虚拟键盘之前将其居中放置在底部-javafx

如何在显示虚拟键盘之前将其居中放置在底部-javafx,javafx,virtual-keyboard,Javafx,Virtual Keyboard,如何将键盘置于屏幕底部的中心位置? 我只有键盘/弹出窗口的大小,在显示板之后。在调用show之前,每个函数都会为所请求的宽度返回0.0。如果我之前知道宽度,我就可以正确设置位置。 键盘的大小可能会在以后更改,这就是为什么我不能使用设置的大小。 我正在使用 我的小服务: public class KeyboardService { private double screenWidth = Screen.getPrimary().getVisualBounds().getWidth(); priv

如何将键盘置于屏幕底部的中心位置? 我只有键盘/弹出窗口的大小,在显示板之后。在调用show之前,每个函数都会为所请求的宽度返回0.0。如果我之前知道宽度,我就可以正确设置位置。 键盘的大小可能会在以后更改,这就是为什么我不能使用设置的大小。 我正在使用

我的小服务:

public class KeyboardService {

private double screenWidth = Screen.getPrimary().getVisualBounds().getWidth();
private double screenHight = Screen.getPrimary().getVisualBounds().getHeight();
private double keyboardPosX = 0.0;
private double keyboardPosY = 0.0; 

private KeyBoardPopup keyboardPopup;

public KeyboardService() {
    keyboardPopup = KeyBoardPopupBuilder.create().initLocale(Locale.GERMAN).build();
    keyboardPopup.setAutoHide(true);
    keyboardPopup.setConsumeAutoHidingEvents(false);
    keyboardPopup.getKeyBoard().setScale(2.5);
    keyboardPopup.getKeyBoard().setLayer(DefaultLayer.DEFAULT);

    keyboardPopup.getKeyBoard().setOnKeyboardCloseButton((e) -> {
        keyboardPopup.hide();
    });

}

public void showKeyboard(Node node){
    keyboardPosX = (screenWidth - keyboardPopup.getWidth())/2;
    //keyboardPosX = (screenWidth - keyboardPopup.getKeyBoard().getWidth())/2;
    keyboardPosY = screenHight;
    keyboardPopup.show(node, keyboardPosX, keyboardPosY);
}}

键盘的宽度是在弹出窗口布局时定义的,在调用show之后会发生什么

要做到这一点,最简单的方法是监听键盘弹出窗口的widthProperty,获取新值,然后相应地移动弹出窗口的窗口

这将有助于:

public KeyboardService() {
    keyboardPopup = KeyBoardPopupBuilder.create().initLocale(Locale.GERMAN).build();
    keyboardPopup.setAutoHide(true);
    keyboardPopup.setConsumeAutoHidingEvents(false);
    keyboardPopup.getKeyBoard().setScale(2.5);
    keyboardPopup.getKeyBoard().setLayer(DefaultLayer.DEFAULT);

    keyboardPopup.getKeyBoard().setOnKeyboardCloseButton((e) -> {
        keyboardPopup.hide();
    });

    // listen to width changes and center 
    keyboardPopup.widthProperty().addListener((obs, ov, nv) -> {
        keyboardPosX = (screenWidth - nv.doubleValue()) / 2d;
        keyboardPopup.getScene().getWindow().setX(keyboardPosX);
    });
}

public void showKeyboard(Node node) {
    keyboardPosX = (screenWidth - keyboardPopup.getWidth())/2;
    keyboardPosY = screenHeight;
    keyboardPopup.show(node, keyboardPosX, keyboardPosY);
}