我有一个
TextField
,我希望在某些情况下显示 Tooltip
。
执行检查后,我运行以下代码:
textFieldUsername.setTooltip(new Tooltip("Enter username!"));
textFieldUsername.getTooltip().setAutoHide(true);
textFieldUsername.getTooltip().show(textFieldUsername, 1, 1);
因此,当有人尝试使用空用户名登录时,他会收到“用户名”提示
Tooltip
TextField
。
但是当需要采取行动时,屏幕左上角会弹出
Tooltip
。
我应该计算场景的坐标,然后将我的
TextField
坐标添加到其中,还是有办法将 1, 1
调用中的这些 show()
参数设置为相对于 TextField
位置?
我认为坐标总是相对于屏幕的。要计算组件坐标,您需要合并场景和窗口坐标。
Point2D p = label.localToScene(0.0, 0.0);
label.getTooltip().show(label,
p.getX() + label.getScene().getX() + label.getScene().getWindow().getX(),
p.getY() + label.getScene().getY() + label.getScene().getWindow().getY());
如果你想直接在组件下显示它:
tooltip.getScene().setOnMouseExited(event-> tooltip.hide());
tooltip.setOnShown(e-> {
tooltip.getScene().getWindow().setX(component.localToScreen(component.getBoundsInLocal()).getMinX()-9); // -9 compensate hard coded shadow inset of the tootltip popup inset
tooltip.getScene().getWindow().setY(component.localToScreen(component.getBoundsInLocal()).getMaxY()-6);
});