我使用来自controlsfx的PopOver来显示来自TableCell的细节数据。我使用tableCellFactory来创建单独的PopOvers。我对此代码有疑问:
public class PopupTableCell extends TableCell {
@Override
protected void updateItem(final Object item, boolean empty) {
super.updateItem(item, empty);
if (empty){
setText(null);
} //if
else {
setText(item.toString());
// PopUp Anzeigen.
final PopOver PopUp = new PopOver();
PopUp.setContentNode(new Label(item.toString()));
setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
Point MouseLocation = MouseInfo.getPointerInfo().getLocation();
PopUp.show(PopupTableCell.this, MouseLocation.getX(), MouseLocation.getY());
System.out.println("entered");
}
});
setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
System.out.println("exited");
PopUp.hide();
}
});
}
}
当我将光标放在单元格上时,它会开始永久地触发输入和退出的事件(即使使用不移动的鼠标光标也是如此)。 我怎样才能达到想要的行为: 鼠标在表格单元格内 - &gt; popover.show() 鼠标离开表格单元格 - &gt; popover.hide()
答案 0 :(得分:3)
这就是我为我解决同样问题的方法。
owner.setOnMouseMoved(evt -> {
if (owner.getLayoutBounds().contains(evt.getX(), evt.getY())) {
if (!popOver.isShowing()) {
popOver.show(owner);
}
}
});
owner.setOnMouseExited(evt -> {
if (owner.getLayoutBounds().contains(evt.getX(), evt.getY())) {
if (!popOver.isShowing())
popOver.show(owner);
} else {
popOver.hide();
}
});