要求:显示的MouseEvent的触发提示作为其文本的坐标。 对于一个ContextMenu,位置存储在的ContextMenuEvent,所以需要我会听contextMenuRequested和更新。
找不到一个提示了类似的话,所以起到了位(见下面的例子):
在显示/显示的时间,我可以查询工具提示的位置:对于AnchorLocation.CONTENT_TOP_LEFT其X / Y似乎是对过去的鼠标位置,虽然略有增加。 可能是偶然的,虽然是对其他类型的锚未指定(并且因此无法使用)和绝对关
蛮力的方法是安装一个鼠标移动处理程序和当前鼠标位置存储到提示的属性。 会不会喜欢,因为这是复制的功能,如ToolTipBehaviour已经跟踪触发位置,可惜顶暗地里,像往常一样
扩展工具提示不会有所帮助,由于行为的私人范围
有任何想法吗?
public class DynamicTooltipMouseLocation extends Application {
protected Button createButton(AnchorLocation location) {
Tooltip t = new Tooltip("");
String text = location != null ? location.toString()
: t.getAnchorLocation().toString() + " (default)";
if (location != null) {
t.setAnchorLocation(location);
}
t.setOnShown(e -> {
// here we get a stable tooltip
t.textProperty().set("x/y: " + t.getX() + "/" + t.getY() + "\n" +
"ax/y: " + t.getAnchorX() + "/" + t.getAnchorY());
});
Button button = new Button(text);
button.setTooltip(t);
button.setOnContextMenuRequested(e -> {
LOG.info("context: " + text + "\n " +
"scene/screen/source " + e.getSceneX() + " / " + e.getScreenX() + " / " + e.getX());
});
button.setOnMouseMoved(e -> {
LOG.info("moved: " + text + "\n " +
"scene/screen/source " + e.getSceneX() + " / " + e.getScreenX() + " / " + e.getX());
});
return button;
}
@Override
public void start(Stage stage) throws Exception {
VBox pane = new VBox(createButton(AnchorLocation.CONTENT_TOP_LEFT));
Scene scene = new Scene(pane);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
@SuppressWarnings("unused")
private static final Logger LOG = Logger
.getLogger(DynamicTooltipMouseLocation.class.getName());
}