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?