获取控件的全局屏幕坐标时,Y坐标不准确

时间:2015-10-08 17:13:57

标签: java javafx popup coordinates global

X很好,但奇怪的是Y移动了几个像素

Popup resultsList = new Popup();

Bounds textFieldBounds = textField.localToScene(textField.getBoundsInLocal());

ListView lsv = new ListView();
lsv.layoutXProperty().set(0);
lsv.layoutYProperty().set(0);
resultsList.getContent().add(lsv);

Window window = textField.getScene().getWindow();
double x = window.getX();
double y = window.getY();

resultsList.show(textField, 
                     x + textFieldBounds.getMinX(), y + textFieldBounds.getMaxY());

到目前为止有没有人遇到这个问题?

1 个答案:

答案 0 :(得分:0)

您将获取文本字段相对于场景的边界,然后添加窗口的坐标。因此,您将被窗口坐标与场景坐标(例如标题栏的大小)之间的任何差异所抵消。

使用

Bounds boundsInScreen = textField.localToScreen(textField.getBoundsInLocal());
resultsList.show(textField, boundsInScreen.getMinX(), boundsInScreen.getMaxY());

您也可以

// your existing code

double sceneX = textField.getScene().getX();
double sceneY = textField.getScene().getY();

resultsList.show(textField, x + textFieldBounds.getMinX() + sceneX,
    y + textFieldBounds.getMaxY() + sceneY);

但当然第一个版本不那么详细。