gutenmorgenuhu
gutenmorgenuhu

Reputation: 2362

setOnMouseEntered and setOnMouseExited foreverloop

I use a PopOver from controlsfx to display detail-data from a TableCell. I use a tableCellFactory to create individual PopOvers. I have a problem with this code:

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();
            }
        });
  }
}

When I place the cursor over a cell, it begins firing the entered and the exited events forever (even with a non moving mouse cursor. How can I achieve the wanted behavior: Mouse inside table cell -> popover.show() Mouse leaves table cell -> popover.hide()

Upvotes: 1

Views: 3587

Answers (1)

user2436830
user2436830

Reputation: 459

This is how I solved the same problem for me.

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();
  }
});

Upvotes: 3

Related Questions