Verbrauchen von Ereignissen mit EventFilters

Zunächst kann mir jemand erklären, warum meinMouseEvent wird konsumiert, egal welchesAlert -Option ich wähle? Ich denke, es hat etwas mit dem Aufrufen eines @ zu tAlert innerhalb einesEventFilter, aber das ist mir nur noch nicht klar.

public class EventFilterConsumeErrorExample extends Application
{
  @Override
  public void start( final Stage primaryStage )
  {
    final CheckBox checkBox = new CheckBox( "Check me!" );
    checkBox.setOnAction( ( event ) ->
    {
      System.out.println( "onAction: " + checkBox.isSelected() );
    } );

    checkBox.addEventFilter( MouseEvent.MOUSE_RELEASED, ( event ) ->
    {
      System.out.println( "onFilter" );

      final Alert alert = new Alert( AlertType.CONFIRMATION, "Do you wonna consume this Event?" );

      if ( alert.showAndWait().get().equals( ButtonType.OK ) )
      {
        System.out.println( "Yes, consume Event" );
        event.consume();
      }
      else
      {
        System.out.println( "No, do NOT consume Event" );
        //<-- Why is the Event consumed anyway? onAction won´t be called.
      }
    } );

    final BorderPane root = new BorderPane( checkBox );
    final Scene scene = new Scene( root, 400, 400 );
    primaryStage.setScene( scene );
    primaryStage.show();
  }


  public static void main( final String[] args )
  {
    System.out.println( "Java Version " + System.getProperties().get( "javafx.runtime.version" ) );
    launch( args );
  }
}

Programm generiert folgende Ausgabe, nachdem Sie das Kontrollkästchen zweimal angeklickt und jede Dialogentscheidung einmal angeklickt haben:

Java Version 8.0.72-b15
onFilter
Ja, Event @ konsumier
onFilter
Nein, konsumiere KEIN Event

In beiden Fällen ändert das Kontrollkästchen seinen Status nicht.onAction wird nicht aufgerufen. Kann jemand erklären, warum das Ereignis von der Checkbox nicht richtig behandelt wird?

Zweitens, wie würden Sie vermeiden, dass das Kontrollkästchen für eine benutzerbasierte Entscheidung aktiviert wird?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage